Can anyone explain this restriction to me?
Trying to extern to a C++ class.
// mirror the C++ vtable
extern (C++) interface IVirtuals
{
void virtualMethod();
}
// create a struct to pose as the C++ class
struct Test
{
// make the virtuals accessible with 'static this'
@property IVirtuals _vtable() { return cast(IVirtuals)&this; }
alias _vtable this;
// class members can be defined here...
}
So that's fine. But the line I'm interested in is:
alias _vtable this;
Aliasing a property like that works fine, but why doesn't this work:
alias (){ return cast(IVirtuals)&this; } this;
Or this:
alias (() => cast(IVirtuals)&this) this;
Or even:
alias (cast(IVirtuals)&this) this;
I don't really see how they're different than the property?
I mean, I can see how they're an expression, and in the situation that
works, I'm aliasing a symbol... but why is that a requirement? And why
isn't a literal just as good as a symbol?