Template mixin enum stringof

Lemonfiend via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Dec 10 05:59:27 PST 2014


On Wednesday, 10 December 2014 at 12:57:07 UTC, Daniel Kozák via 
Digitalmars-d-learn wrote:
> V Wed, 10 Dec 2014 12:35:44 +0000
> Lemonfiend via Digitalmars-d-learn 
> <digitalmars-d-learn at 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 at 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

Ah, thanks for the warning!


More information about the Digitalmars-d-learn mailing list