www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 570] New: Bogus recursive mixin error

reply d-bugmail puremagic.com writes:

           Summary: Bogus recursive mixin error
           Product: D
           Version: 0.174
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Keywords: rejects-valid
          Severity: major
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: daekharel gmail.com

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
recursive mixin instantiation
err.d(12): template instance err.TupleStruct!(char[],char[]) error

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.

Nov 18 2006
next sibling parent d-bugmail puremagic.com writes:

------- Comment #1 from daekharel gmail.com  2006-11-18 21:09 -------
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).

Nov 18 2006
prev sibling parent d-bugmail puremagic.com writes:

bugzilla digitalmars.com changed:

           What    |Removed                     |Added
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED

------- Comment #2 from bugzilla digitalmars.com  2008-07-09 22:35 -------
Fixed dmd 1.032 and 2.016

Jul 09 2008