Seems like an off-by-one error in checking the bounds. import std.stdio, std.conv; void main() { auto foo = cast(ubyte) roundTo!uint(255.0); writeln(foo); // 255: Works. auto bar = roundTo!ubyte(254.0); writeln(bar); // 254: Works. auto baz = roundTo!ubyte(255.0); // Throws }
Fixed: http://www.dsource.org/projects/phobos/changeset/2167