blob: 81b070f040ee3ebffd6dc4ae6f89773d5c7a49f3 [file] [log] [blame]
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
// Examples from CWG1056.
namespace Example1 {
template<class T> struct A;
template<class T> using B = A<T>;
template<class T> struct A {
struct C {};
B<T>::C bc; // ok, B<T> is the current instantiation.
};
template<class T> struct A<A<T>> {
struct C {};
B<B<T>>::C bc; // ok, B<B<T>> is the current instantiation.
};
template<class T> struct A<A<A<T>>> {
struct C {};
B<B<T>>::C bc; // expected-error {{missing 'typename'}}
};
}
namespace Example2 {
template<class T> struct A {
void g();
};
template<class T> using B = A<T>;
template<class T> void B<T>::g() {} // ok.
}