i admit that i am not very good at reading/understanding language definition syntax. but yet i think the given enum specs ( http://dlang.org/enum.html ) are not quite in order.
they seem to imply that both enum ; enum WhatAmI ; are correct. while the first one throws an error as expected, the second one passes and is partially usable, potentially similar to C's #define OPTION. however, typedef's throwing of an error makes me doubt that this is legal: ---- import std.stdio, std.traits; enum test; // passes but is it really legal? int main(string[] args) { writeln( __traits(compiles, test) ); // true writeln( is( test == enum ) ); // true writeln( isBasicType!(test) ); // true writeln( isSomeFunction!(test) ); // false // writeln( typeof(test).stringof ); // Error: argument test to typeof is not an expression return 0; }