blob: 6913d088dcecde2e9e908c79dbd144559f3eea2d [file] [log] [blame]
// P0634R3
// { dg-do compile { target c++20 } }
struct X {
template<typename T>
struct N { };
};
template <typename T>
struct Y {
template<typename U>
struct N { };
};
template <typename T>
struct A
{
template <typename U>
struct N { };
typedef typename A::template N<int> a1;
typedef typename A::template N<T> a2;
typename A::template N<int> a3;
typename A::template N<T> a4;
A::template N<int> a9;
A::template N<T> a10;
typedef A<T>::template N<int> a13;
typedef A<T>::template N<T> a14;
typedef typename X::template N<int> x1;
typedef typename X::template N<T> x2;
typename X::template N<int> x3;
typename X::template N<T> x4;
typedef X::N<int> x5;
typedef X::N<T> x6;
typedef typename X::N<int> x7;
typedef typename X::N<T> x8;
X::N<int> x9;
X::N<T> x10;
typename X::N<int> x11;
typename X::N<T> x12;
typedef typename Y<int>::template N<int> y1;
typedef typename Y<int>::template N<T> y2;
typedef typename Y<T>::template N<int> y3;
typedef typename Y<T>::template N<T> y4;
typename Y<int>::template N<int> y5;
typename Y<int>::template N<T> y6;
typename Y<T>::template N<int> y7;
typename Y<T>::template N<T> y8;
typedef Y<int>::N<int> y9;
typedef Y<int>::N<T> y10;
typedef Y<T>::template N<int> y11;
typedef Y<T>::template N<T> y12;
typedef typename Y<int>::N<int> y13;
typedef typename Y<int>::N<T> y14;
Y<int>::N<int> y17;
Y<int>::N<T> y18;
typename Y<int>::N<int> y21;
typename Y<int>::N<T> y22;
typedef Y<int>::N<int> y25;
typedef Y<int>::N<T> y26;
typedef Y<T>::template N<int> y27;
typedef Y<T>::template N<T> y28;
};