Eponymous Aggregates

Simen Kjaeraas simen.kjaras at gmail.com
Sat Aug 10 09:42:53 PDT 2013


On 2013-08-10, 14:58, JS wrote:

> e.g.,
>
> interface A
> {
>      static T A(T)() { ... }
> }
>
> can be used as A!T instead of A.A!T. Same for classes and structs. If  
> you want a use case I'm not going to stop you from coming up with one...  
> so feel free.

Tried with DMD 2.063.2, and I'm unable to make A!T compile. Are you sure
you've written the code you intended to?

For reference, this is the code I tried:

interface A {
     static T A(T)() {
         return T.init;
     }
}

void main() {
     A!int a;        // Error: template instance A!(int) A is not a  
template declaration, it is a interface
     auto b = A!int; // Error: template instance A!(int) A is not a  
template declaration, it is a interface
}

This code, of course, works:

template A(T) {
     interface A {
     }
}

void main() {
     A!int a;
}


More information about the Digitalmars-d mailing list