Can't seem to call super constructor if it's a template

Steven Schveighoffer schveiguy at gmail.com
Wed Aug 12 11:10:42 UTC 2020


On 8/12/20 2:22 AM, Alexandru Ermicioi wrote:
> On Monday, 10 August 2020 at 18:37:06 UTC, Andrei Alexandrescu wrote:
>> class A {
>>     this(T)() {}
>> }
>>
>> class B : A {
>>     this() { super!int(); }
>> }
>>
>> Error: found ! when expecting ; following statement
>>
>> That should work, shouldn't it?
> 
> It is not possible to call cobstructors with explicit template 
> parameters. There was documentation note about that from what I 
> remember, though for some reason I can't find yet.
> 
> Reason for that may be the case where you have templated class with 
> templated constructor. How would user pass template args to class itself 
> and then to constructor?

A derived class doesn't have to pass template parameters to the base 
type. super!T should be unambiguous.

It's true that a templated constructor with explicit parameters couldn't 
be created with that constructor without adding some syntax mechanism 
for it. But it could be derived from.

-Steve


More information about the Digitalmars-d mailing list