On 2013-08-17 01:51, captaindet wrote:
my understanding was that enums are all compile time entities that
are just copied around. at compile time. a named enum type should
make no difference.

oh i see now, naming them is just creating a disguise for the base type. then 
they can become compile-time-known when declared const (see below). only 
anonymous enum (manifest constant) are true compile time objects. reminds me of 
my (type)tuple confusion. two completely different animals/concepts, with 
similar/confusing syntax and blurry docs.


module demo;

import std.stdio;

enum Test{
        test2 = 2,
        test4 = 4
}
enum foo = Test.test2;
const Test bar = Test.test4;    // does the trick
enum wtf = bar;
pragma( msg, foo );             // prints: cast(Test)2
pragma( msg, bar );             // pritns: cast(Test)4

void main(){
        writeln( typeof(foo).stringof, " = ", foo );  // prints: Test = test2
        writeln( typeof(bar).stringof, " = ", bar );  // prints: const(Test) = 
test4
}

Reply via email to