Lutger Wrote: > > You can use line and file info with default arguments, this works > (special case). I just hack around the default unittest system, > something like this: > > void test(string testName)(void delegate () testClosure, > int line = __LINE__, > string file = __FILE__) > { > // register test start, run testClosure, end test > } > > void expectEquals(A, B)(A a, B b, > int line = __LINE__, > string file = __FILE__) > { > // record outcome of assertion > }
Ah ha! I din't know that D had __LINE__ and __FILE__. I thought those had been done away with along with the preprocessor. It looks like they're a lot smarter than in C as well, since this works just fine: test.d: 1 void main() { 2 printlocation(); // prints "test.d:2" (as opposed to "test.d:5") 3 } 4 5 void printlocation( string file = __FILE__, int line = __LINE__ ) { 6 writefln( "%s:%d", file, line ); 7 } This still feels a little more hacky than I'd like, but it should do. Thanks! :-)