Best way to refer to the type of a struct inside itself ?

Ali Çehreli acehreli at yahoo.com
Fri May 15 15:24:32 UTC 2020


On 5/15/20 8:04 AM, Paul Backus wrote:
> On Friday, 15 May 2020 at 14:55:07 UTC, Ali Çehreli wrote:
>> Additionally, the name of a template when used inside that template 
>> means that instance of it. So just say Foo. :)
>>
>> struct Foo(A, B, C, size_t a, size_t b)
>> {
>>   Foo * p;
>> }
>>
>> Ali
> 
> To expand a little, this works because a struct template such as the one 
> above is actually syntax sugar for the following:
> 
> template Foo(A, B, C, size_t a, size_t b)
> {
>      struct Foo
>      {
>          // refers to the inner `struct Foo`, not the outer `template Foo`
>          Foo* p;
>      }
> }
> 
> The relevant parts of the language spec are:
> 
> - Aggregate Templates: 
> https://dlang.org/spec/template.html#aggregate_templates
> - Eponymous Templates: 
> https://dlang.org/spec/template.html#implicit_template_properties
Yes, that is a consistent way of explaining it. :)

As an off-topic trivia, the same feature is in C++ as well:

#include <iostream>

template <class A, class B, class C, size_t a, size_t b>
struct Foo
{
   Foo * p;  // <-- Foo means the template instance
};

int main() {
   Foo<int, double, long, 10, 20> f;
   f.p = &f;
}

Ali



More information about the Digitalmars-d-learn mailing list