// 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. }