On Monday, 27 October 2014 at 16:08:26 UTC, Solomon E wrote:
It works after I added 'static' to the declaration of 'invoke()' (and import std.stdio, std.traits.)

I fiddled around with it for hours before I tried 'static' there, because I've only been studying D for a week, so only about half of this code and the error messages made any sense to me when I started on it.

Once it started passing all the tests, I still didn't quite get how it all worked, because of suspecting there was a typo in the code between writing TestClass and testClass. So I tested whether specific instances are called (instead of maybe just the first one constructed) by adding a static counter to TestClass, and storage of the counter by each instance. It looks all right.

I'm pretty sure this is a bug. I'm going to file a report. If one
of those template works, both should.

I have been trying to build a reflection system over the last few
weeks, and noticed different incarnations of this problem several
times:

<b>
&(__error).instanceMethod
</b>

In certain cases, the compiler seems to drop the enclosing type
of the method, but I'm not sure why.


This error seems like it may be related some how:

enum index = __traits(getVirtualIndex, TestClass.instanceMethod);
enum p = TestClass.classinfo.vtbl[index];

The above code will produce this error:
Error: typeid(main.TestClass).vtbl is not yet implemented at
compile time

but if this is the problem, shouldn't Both of the test cases fail?

Reply via email to