spir Wrote: > On 02/10/2011 08:22 PM, Jesse Phillips wrote:
> > enum FileName : string { > > file1 = "file1.ext", > > file2 = "file2.ext" > > } > > > > void main(string args[]) > > { > > foreach(a; __traits(allMembers, FileName)) > > writeln(mixin("FileName." ~ a)); > > } > > Why the mixin? Is it (just) to have the output string computed at > compile-time? The value of 'a' is the enum field name, not its value. The code will ultimately expand to: void main() { writeln(FileName.file1)); writeln(FileName.file2)); } Which in turn will may have its enum contents expanded to the string value. The mixin is required because it is a named enum and 'a' is a string, not an alias: writeln(FileName.a) doesn't work and nor does: writeln(FileName.mixin(a));