Unwanted recursive expansion

Luc J. Bourhis via Digitalmars-d digitalmars-d at puremagic.com
Thu Jan 15 04:31:00 PST 2015


Consider the following program:

struct Expr(E) {
   const E expr;

   // If I replace the return type with "auto", dmd enters into an 
infinite loop instead of failing (see below)
   @property Expr!(Transposed!E)  trans() {
     alias R = Transposed!E;
     return Expr!R(R(expr));
   }
}

struct Transposed(E) {
     const E expr;
}

struct Matrix {
   @property auto asExpression() {
     return Expr!(Matrix)(this);
   }

   alias asExpression this;
}

void main() {
     auto a = Matrix();
     auto e = a.trans;
     pragma(msg, typeof(e).stringof);
}

It fails to compile:

~> dmd -v | head -n1
DMD64 D Compiler v2.066-devel
~> dmd -c expression_template.d
expression_template.d(4): Error: template instance 
expression_template.Transposed!(Transposed!(Transposed!(Transposed!( 
.................. ) recursive expansion

Am I missing something?



More information about the Digitalmars-d mailing list