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