doesn't work, but should. enum string s = "0x9.D70A3D70A3D70A4p-3"; enum d2 = to!real(s); pragma(msg, d2); gives me: /usr/include/dmd-d/std/conv.d(2305): Error: Cannot convert &real to long* at compile time /usr/include/dmd-d/std/conv.d(1592): called from here: parse(value) /usr/include/dmd-d/std/conv.d(268): called from here: toImpl(_param_0) test.d(14): called from here: to("0x9.D70A3D70A3D70A4p-3") /usr/include/dmd-d/std/conv.d(2305): Error: Cannot convert &real to long* at compile time /usr/include/dmd-d/std/conv.d(1592): called from here: parse(value) /usr/include/dmd-d/std/conv.d(268): called from here: toImpl(_param_0) test.d(15): called from here: to("0x9.D70A3D70A3D70A4p-3") to("0x9.D70A3D70A3D70A4p-3") however, double d = to!real(s); writeln(d); compiles and prints 1.23
Added CTFE tag. I don't think there's any sane way to do this without CTFE support for the pointer cast, or at least unions.
pull: https://github.com/D-Programming-Language/dmd/pull/4674
Got rid of all the hex bit-packing in `std.conv.parse`, only missing bit is the call to C's `ldexp`, which still causes this to fail at compile-time. You can replace that with manual exponentiation if wanted to fix this, just as done for decimal strings now.
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/9934 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB