| /* |
| 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() {} |