On Monday, 7 December 2015 at 20:56:24 UTC, John Carter wrote:
So whilst attempt to convert from a hex string (without the 0x)
to int I bumped into the @@@BUG@@@ the size of China....
https://github.com/D-Programming-Language/phobos/blob/master/std/conv.d#L2270
Is there a bugzilla issue number tracking this?
Searching for conv and parse in the issue tracker didn't turn
it up....
Is this a phobos bug or a compiler bug?
I followed the example in the unit test to get a workaround....
but I don't understand why the workaround works!
Despite the note in the unittest, it's actually not a bug after
all - parse is just designed for a different use case than yours.
What you want is T std.conv.to(T, S)(S value, uint radix). For
example, this works fine:
import std.conv;
foreach (i; 2..37)
{
assert(to!int("0", i) == 0);
assert(to!int("1", i) == 1);
assert(to!byte("10", i) == i);
}
Or using UFCS, if you prefer:
import std.conv;
foreach (i; 2..37)
{
assert("0".to!int(i) == 0);
assert("1".to!int(i) == 1);
assert("10".to!byte(i) == i);
}
The technical reason that the compiler won't let you use parse
that way, is that its first argument is annotated with ref and
cannot accept rvalues for memory safety reasons.