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

Alexandru Ermicioi alexandru.ermicioi at
Wed Aug 12 11:32:19 UTC 2020

On Wednesday, 12 August 2020 at 11:10:42 UTC, Steven 
Schveighoffer wrote:
> 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.

Indeed it should, but that would be another edge case that would 
be usable just in derived classes and not in any other location, 
won't it?

Imho, it would make more confusing for new joiner, where he would 
expect same functionality to be available also for new 
expressions or during allocation using std.experimental.

I think we should not allow just this use case, but rather think 
on how can we chain multilple sets of template args, which would 
solve the thing also for new expressions too.

- Alex

More information about the Digitalmars-d mailing list