Bug 8523 – [CTFE] compile time parsing of hex floats

Status
NEW
Severity
enhancement
Priority
P4
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-08-08T12:55:19Z
Last change time
2024-12-01T16:15:28Z
Keywords
bootcamp, CTFE
Assigned to
No Owner
Creator
Ellery Newcomer
Moved to GitHub: phobos#9934 →

Comments

Comment #0 by ellery-newcomer — 2012-08-08T12:55:19Z
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
Comment #1 by peter.alexander.au — 2013-01-05T12:03:21Z
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.
Comment #2 by clem — 2015-05-22T13:05:03Z
Comment #3 by dbugz — 2018-08-07T05:18:05Z
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.
Comment #4 by robert.schadek — 2024-12-01T16:15:28Z
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