Bug 16190 – to!string on enum should be fully qualified for consistency

Status
NEW
Severity
major
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2016-06-21T18:13:16Z
Last change time
2024-12-01T16:27:18Z
Assigned to
No Owner
Creator
Timothee Cour
Moved to GitHub: phobos#10185 →

Comments

Comment #0 by timothee.cour2 — 2016-06-21T18:13:16Z
enum A{ a1, a2, } struct B{ A b1; string b2; int c3; } import std.conv:to; void main(){ auto b=B(A.a1, "foo", 13); enum b_string=`B(a1, "foo", 13)`; assert(b.to!string == b_string); mixin(`auto b1=B(A.a1, "foo", 13);`);//works //mixin(`auto b2=`~b_string~`;`);//Error: undefined identifier 'a1' } Pretty much every type in D works when reconstructing as I did above: mixin(`auto b2=`~b.to!string~`;`); except when there's an enum type somewhere inside What's a workaround?
Comment #1 by b2.temp — 2016-06-21T19:01:55Z
I think that any fix directly in to() can break a lot of code because currently to!string and to!E work together. I'm sure that it's already used as it is now by many people. The fix, if any, should maintain the old behvior and allow to get the identifier when explicitly needed, for example: auto toImpl(T, S, bool fq = false)(auto ref E e) if (is(S == enum) && is(T==string)) {} with "fq" a CT bool that indicates if the output includes the "enum identifier". "Fully qualified" would mean that even the module name would be included so I suppose that what you want is actually the enum identifier. ---- By the way why do you report this as a dmd (and not phobos) issue ?
Comment #2 by robert.schadek — 2024-12-01T16:27:18Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/10185 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB