Actually I find the __traits system a bit convoluted and inconsistent with other similar features. There seems to be a real need to unify the different methods of reflection in D.

For example, I can do this without using __traits

int i;
writeln( i.stringof );

and I can do this

void function x() {};
writeln( x.stringof );

but it won't work for the main function

int main(char[][] args)
{
  writeln( main.stringof ); // compile error (bug?)
}

but this works

writeln(__traits( identifier, main ));

It seems that __traits(itentifier, ) and .stringof are two ways of getting access to the same information.

So why do we have __traits and the built in properties that overlap in functionality? Why is it inconsistently applied as seen with function main (although that could simply be a bug)? The situation is rather confusing.

I'll try the bug tracker to report the need for a "self" solution, and the inconsistent application of .stringof where it fails with main function.

I sure hope the situation will improve.


I agree - except I wouldn't reserve 'self' as a keyword. I'd probably extend the existing __traits mechanism, avoiding the need for the dummy/parent hack. Possibly also create a shortcut for nested __traits?

It's not down to me though - I just wanted to give you something to work with so you can get your project working.

D has a bug tracker where you could post the feature request:

http://d.puremagic.com/issues/enter_bug.cgi?product=D

Good luck :)


Reply via email to