| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/fail337.d(13): Error: static assert: `0` is false |
| fail_compilation/fail337.d(26): instantiated from here: `bar!()` |
| fail_compilation/fail337.d(33): 100 recursive instantiations from here: `foo!196` |
| fail_compilation/fail337.d(41): 253 recursive instantiations from here: `baz!300` |
| --- |
| */ |
| |
| 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); |
| } |