V Wed, 10 Dec 2014 12:35:44 +0000 Lemonfiend via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> napsáno:
> On Wednesday, 10 December 2014 at 12:08:34 UTC, ketmar via > Digitalmars-d-learn wrote: > > On Wed, 10 Dec 2014 11:52:11 +0000 > > Lemonfiend via Digitalmars-d-learn > > <digitalmars-d-learn@puremagic.com> > > wrote: > > > >> Consider the following: > >> > >> --- > >> enum Foo { BAR, } > >> > >> mixin template S(string s_) > >> { > >> enum s = s_; > >> } > >> > >> void main() > >> { > >> mixin S!(Foo.BAR.stringof); // Error: identifier > >> 'stringof' of 'Foo.BAR.stringof' is not defined > >> > >> enum e = Foo.BAR.stringof; > >> mixin S!(e); // works fine > >> } > >> --- > >> > >> Why doesn't the first work? And is there an alternative to the > >> second version? > > > > mixin S!((Foo.BAR).stringof); > > > > sorry, don't remember the parsing rule for this. > > Wow, I didn't even consider that.. Thanks! Note: Using .stringof for code generation is not recommended, as the internal representation of a type or expression can change between different compiler versions. http://dlang.org/property#stringof