"Jonathan M Davis" <jmdavisp...@gmx.com> wrote in message news:mailman.388.1326617938.16222.digitalmars-d-le...@puremagic.com... > On Sunday, January 15, 2012 03:53:09 Nick Sabalausky wrote: >> Is there a way to get the name of an enum value at compile-time? >> >> For instance: >> >> import std.stdio; >> enum Foo { hello } >> void main() >> { >> writeln(Foo.hello); >> } >> >> That prints "hello". But what I need is to get "hello" into a string at >> compile-time. >> >> Of course, I could just manually write a ctfe-able "fooToString()", or >> implement something like std.typecons.defineEnum (which appears to be >> deprecated now). But I'm wondering if I'm overlooking a better solution. > > to!string(Foo.hello) >
Nope. That was the first thing I tried. With 2.057: >type testCTEnumToString.d import std.conv; enum Foo { hello } enum x = to!string(); >dmd testCTEnumToString.d -c phobos\std\conv.d(237): Error: template std.conv.toImpl(T,S) if (isImplicitlyConvertible!(S,T)) does not match any function template declaration phobos\std\conv.d(237): Error: template std.conv.toImpl(T,S) if (isImplicitlyConvertible!(S,T)) cannot deduce template function from argument types !(string)() phobos\std\conv.d(237): Error: template instance toImpl!(string) errors instantiating template testCTEnumToString.d(3): called from here: to() Doesn't work at runtime, either: >type testRTEnumToString.d import std.conv; enum Foo { hello } void main() { auto x = to!string(); } >dmd testRTEnumToString.d -c phobos\std\conv.d(237): Error: template std.conv.toImpl(T,S) if (isImplicitlyConvertible!(S,T)) does not match any function template declaration phobos\std\conv.d(237): Error: template std.conv.toImpl(T,S) if (isImplicitlyConvertible!(S,T)) cannot deduce template function from argument types !(string)() phobos\std\conv.d(237): Error: template instance toImpl!(string) errors instantiating template testRTEnumToString.d(5): Error: template instance std.conv.to!(string).to!() error instantiating