February 07, 2023

Hi,

for the source code below, the compiler says:

app.d(26): constructor app.TObject.this hides base class function app.DelphiObject.this
app.d(26): add alias this = app.DelphiObject.this to app.TObject's body to merge the overload sets

But if I add alias this = app.DelphiObject.this then the compiler says, the syntax is wrong:

Error: identifier or new expected following ., not this
app.d(20): Error: cannot use syntax alias this = app.DelphiObject, use alias app.DelphiObject this instead

But If I use alias app.DelphiObject this then another error is shown:
app.d(22): Error: no identifier for declarator app.DelphiObject
app.d(22): this is a keyword, perhaps append _ to make it an identifier

What is the correct "alias this" syntax to be able to access the super constructor (DelphiObjectReference)?

struct DelphiObjectReference
{
    ptrdiff_t reference;
}

mixin template PascalClass(string name)
{
    this (DelphiObjectReference r){}
}

class DelphiObject
{
    this(){}
    this (DelphiObjectReference r){}
}

class TObject : DelphiObject
{
    mixin PascalClass!("System.TObject");

    this(TObject AOwner){}
}

void main()
{
    new TObject(DelphiObjectReference(123));
}

Kind regards
André