Bug 570 – Bogus recursive mixin error

Status
RESOLVED
Resolution
FIXED
Severity
major
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
x86
OS
Linux
Creation time
2006-11-18T21:06:00Z
Last change time
2014-02-15T13:22:00Z
Keywords
rejects-valid
Assigned to
bugzilla
Creator
daekharel

Comments

Comment #0 by daekharel — 2006-11-18T21:06:54Z
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).
Comment #2 by bugzilla — 2008-07-09T22:35:38Z
Fixed dmd 1.032 and 2.016