// RUN: %clang_cc1 -fsyntax-only -verify %s // PR5741 namespace test0 { struct A { struct B { }; struct C; }; struct A::C : B { }; } // Test that successive base specifiers don't screw with each other. namespace test1 { struct Opaque1 {}; struct Opaque2 {}; struct A { struct B { B(Opaque1); }; }; struct B { B(Opaque2); }; struct C : A, B { // Apparently the base-or-member lookup is actually ambiguous // without this qualification. C() : A(), test1::B(Opaque2()) {} }; } // Test that we don't find the injected class name when parsing base // specifiers. namespace test2 { template <class T> struct bar {}; template <class T> struct foo : bar<foo> {}; // expected-error {{use of class template 'foo' requires template arguments}} expected-note {{template is declared here}} } |