------- Comment #9 from  2009-04-09 04:24 -------
Error messages generated from my patch for the code below:
bug.d(2): Error: static assert  (0) is false
bug.d(9):        instantiatied from here: bar!()
bug.d(14):        100 recursive instantiations from here: foo!(196)
bug.d(19):        253 recursive instantiations from here: baz!(300)

(Oops -- just realised I there's a typo in "instantiated" in the non-recursive
messages. That's easy to fix).
Note that it detects the recursive instantiation in foo!(), even though it is
instantiated from three different places.

template bar() {
   static assert(0);

template foo(int N) {
  static if (N>0) {
     static if (N&1) alias foo!(N-3) foo;
     else alias foo!(N-1) foo;
  } else alias bar!() foo; 

template baz(int M) {
   static if (M<50) {
     alias foo!(M*4) baz;
   } else alias baz!(M-1) baz;

void main() {
  int x = baz!(300);


Reply via email to