You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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?
The text was updated successfully, but these errors were encountered:
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 ?
timothee.cour2 (@timotheecour) reported this on 2016-06-21T18:13:16Z
Transfered from https://issues.dlang.org/show_bug.cgi?id=16190
CC List
Description
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?The text was updated successfully, but these errors were encountered: