// RUN: %clang_cc1 -fsyntax-only -verify %s -pedantic template struct S { S() { } }; template struct vector { void push_back(const T&) { int a[sizeof(T) ? -1: -1]; } // expected-error {{array with a negative size}} }; class ExprEngine { public: typedef vector >CheckersOrdered; CheckersOrdered Checkers; template void registerCheck(CHECKER *check) { Checkers.push_back(S()); // expected-note {{in instantiation of member function 'vector>::push_back' requested here}} } }; class RetainReleaseChecker { }; void f(ExprEngine& Eng) { Eng.registerCheck(new RetainReleaseChecker); // expected-note {{in instantiation of function template specialization 'ExprEngine::registerCheck' requested here}} } // PR 5838 namespace test1 { template struct A { int a; }; template struct B : A, A { void f() { a = 0; // should not be ambiguous } }; template struct B; struct O { int a; template struct B : A { void f() { a = 0; // expected-error {{'test1::O::a' is not a member of class 'test1::O::B'}} } }; }; template struct O::B; // expected-note {{in instantiation}} } // PR7248 namespace test2 { template struct A { void foo() { T::bar(); // expected-error {{type 'int' cannot}} } }; template class B { void foo(A a) { a.test2::template A::foo(); // expected-note {{in instantiation}} } }; template class B; } namespace PR14124 { template struct S { int value; }; template void f() { S::value; } // expected-error {{invalid use of non-static data member 'value'}} template void f(); // expected-note {{in instantiation of}} struct List { List *next; }; template struct A {}; A a; // ok void operator&(struct Whatever); template struct B {}; B b; // still ok }