| 1 | BEGIN |
| 2 | template<typename T = int> struct A {}; |
| 3 | template<typename T> struct B {}; |
| 4 | template<typename T> struct C; |
| 5 | template<typename T> struct D; |
| 6 | template<typename T> struct E; |
| 7 | template<typename T = int> struct G; |
| 8 | template<typename T = int> struct H; |
| 9 | template<typename T> struct J {}; |
| 10 | template<typename T = int> struct J; |
| 11 | struct K : J<> {}; |
| 12 | template<typename T = void> struct L; |
| 13 | struct FriendL { |
| 14 | template<typename T> friend struct L; |
| 15 | }; |
| 16 | END |
| 17 | |
| 18 | namespace DeferredLookup { |
| 19 | template<typename T, typename U = T> using X = U; |
| 20 | template<typename T> void f() { (void) X<T>(); } |
| 21 | template<typename T> int n = X<T>(); |
| 22 | template<typename T> struct S { X<T> xt; enum E : int; }; |
| 23 | template<typename T> enum S<T>::E : int { a = X<T>() }; |
| 24 | |
| 25 | namespace Indirect { |
| 26 | template<typename, bool = true> struct A {}; |
| 27 | template<typename> struct B { template<typename T> using C = A<T>; }; |
| 28 | } |
| 29 | } |
| 30 | |