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