Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

to!string on enum should be fully qualified for consistency #10185

Open
dlangBugzillaToGithub opened this issue Jun 21, 2016 · 1 comment
Open

Comments

@dlangBugzillaToGithub
Copy link

timothee.cour2 (@timotheecour) reported this on 2016-06-21T18:13:16Z

Transfered from https://issues.dlang.org/show_bug.cgi?id=16190

CC List

  • timothee.cour2

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?
@dlangBugzillaToGithub
Copy link
Author

b2.temp commented on 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 ?

@LightBender LightBender removed the P2 label Dec 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants