| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/ice13356.d(32): Error: template instance `Algebraic!(Tuple!(List))` recursive template expansion |
| fail_compilation/ice13356.d(15): Error: template instance `ice13356.isPrintable!(List)` error instantiating |
| fail_compilation/ice13356.d(33): instantiated from here: `Tuple!(List)` |
| --- |
| */ |
| |
| struct Tuple(Types...) |
| { |
| Types expand; |
| alias expand this; |
| |
| static if (isPrintable!(Types[0])) |
| { |
| } |
| } |
| |
| // T == Tuple!List, and accessing its .init will cause unresolved forward reference |
| enum bool isPrintable(T) = is(typeof({ T t; })); |
| |
| struct Algebraic(AllowedTypesX...) |
| { |
| alias AllowedTypes = AllowedTypesX; |
| |
| double x; // dummy for the syntax Payload(d) |
| } |
| |
| struct List |
| { |
| alias Payload = Algebraic!( |
| Tuple!(List) |
| ); |
| |
| Payload payload; |
| |
| this(double d) { payload = Payload(d); } |
| } |
| |
| void main() {} |