On Monday, 12 February 2018 at 17:29:47 UTC, Jonathan M Davis
wrote:
On Monday, February 12, 2018 17:07:50 Marc via
Digitalmars-d-learn wrote:
[...]
If you actually use the enum values anywhere other than with
anything from std.conv, std.format, or std.stdio, then when
they get converted to strings, you get their actual values.
It's just that those modules specifically grab the names of the
enum members when converting enums to strings, since in all
cases other than with strings, it's generally desirable that
when converting an enum member to string, you get the name -
and with enums with a base type of string, whether you want the
name or the value depends on what you're trying to do. Both can
be useful.
So, when dealing with std.format, std.conv, and std.stdio, if
you want an enum of base type string to be treated as a string,
then you'll have to force it with a cast. Anywhere else, if
they get converted to string, then you'll get their values. If
that is unacceptable for your use case for whatever reason,
then you'll have to try a different solution. What solution
would then work best would presumably depend on whatever it is
you're actually trying to do.
- Jonathan M Davis
Thanks for you always well-thought-out answer. I was going to
print it with writefln() calls more than anywhere else so to
avoid casts in all those places, which would make it ugly, I just
used
enum foo = "a";
enum baa = "b";
which I found to be more common D-idiomatic.