D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.

Issue 570

Summary: Bogus recursive mixin error
Product: D Reporter: Michael Arntzenius <daekharel>
Component: dmdAssignee: Walter Bright <bugzilla>
Status: RESOLVED FIXED
Severity: major Keywords: rejects-valid
Priority: P2
Version: D1 (retired)
Hardware: x86
OS: Linux

Description Michael Arntzenius 2006年11月18日 21:06:54 UTC
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 Michael Arntzenius 2006年11月18日 21:09:42 UTC
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).
Comment 2 Walter Bright 2008年07月09日 22:35:38 UTC
Fixed dmd 1.032 and 2.016

AltStyle によって変換されたページ (->オリジナル) /