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?

Reply via email to