1 // RUN: %clang_cc1 -verify=expected,precxx17 %std_cxx98-14 %s 2 // RUN: %clang_cc1 -verify=expected,cxx17 %std_cxx17- %s 3 4 template <class T> struct Base { 5 // expected-note@-1 2{{member type 'Base<int>' found by ambiguous name lookup}} 6 // expected-note@-2 2{{member type 'Base<char>' found by ambiguous name lookup}} 7 static void f(); 8 }; 9 10 struct X0 { }; 11 12 template <class T> struct Derived: Base<int>, Base<char> { 13 typename Derived::Base b; // expected-error{{member 'Base' found in multiple base classes of different types}} 14 typename Derived::Base<double> d; // OK 15 gDerived16 void g(X0 *t) { 17 t->Derived::Base<T>::f(); 18 t->Base<T>::f(); 19 t->Base::f(); // expected-error{{member 'Base' found in multiple base classes of different types}} 20 } 21 }; 22 23 namespace PR6717 { 24 template <typename T> 25 class WebVector { 26 } // expected-error {{expected ';' after class}} 27 28 WebVector(const WebVector<T>& other) { } // expected-error{{undeclared identifier 'T'}} \ 29 precxx17-error{{a type specifier is required}} \ 30 cxx17-error{{deduction guide declaration without trailing return type}} 31 32 template <typename C> 33 WebVector<T>& operator=(const C& other) { } // expected-error{{undeclared identifier 'T'}} 34 } 35