import std.stdio;
template TupleDecls(T, R ...) {
T value;
static if (R.length)
mixin TupleDecls!(R) Inner;
}
struct TupleStruct(T ...) { mixin TupleDecls!(T); }
void main() {
alias TupleStruct!(char[], char[]) twoStrings;
}
---------
The above code generates the following errors when compiling:
err.d(6): mixin err.TupleStruct!(char[],char[]).TupleStruct.TupleDecls!(char[],char[]).TupleDecls!(char[]) recursive mixin instantiation
err.d(12): template instance err.TupleStruct!(char[],char[]) error instantiating
The compiler seems to think that TupleDecls!(char[]) is the same as TupleDecls!(char[], char[]) somehow, and rejects instantiating the former inside the latter as being recursive, even though it's not.
Comment #1 by daekharel — 2006-11-18T21:09:42Z
Correction: it is recursive, but not infinitely recursive, as instantiating TupleDecls!(char[], char[]) inside of TupleDecls!(char[], char[]) would be. Also, the compiler accepts this code just fine when the types passed to the template aren't the same, as in TupleDecls!(char[], int).