nested-name-spec-locations.cpp revision 7c3179cf463c3b3b8c21dbb955f933ba50b74f28
1// RUN: %clang_cc1 -fsyntax-only -verify %s 2 3// Note: the formatting in this test case is intentionally funny, with 4// nested-name-specifiers stretched out vertically so that we can 5// match up diagnostics per-line and still verify that we're getting 6// good source-location information. 7 8namespace outer { 9 namespace inner { 10 template<typename T> 11 struct X0 { 12 }; 13 } 14} 15 16template<typename T> 17struct add_reference { 18 typedef T& type; 19}; 20 21namespace outer_alias = outer; 22 23template<typename T> 24struct UnresolvedUsingValueDeclTester { 25 using outer::inner::X0< 26 typename add_reference<T>::type 27 * // expected-error{{declared as a pointer to a reference of type}} 28 >::value; 29}; 30 31UnresolvedUsingValueDeclTester<int> UnresolvedUsingValueDeclCheck; // expected-note{{in instantiation of template class}} 32 33template<typename T> 34struct UnresolvedUsingTypenameDeclTester { 35 using outer::inner::X0< 36 typename add_reference<T>::type 37 * // expected-error{{declared as a pointer to a reference of type}} 38 >::value; 39}; 40 41UnresolvedUsingTypenameDeclTester<int> UnresolvedUsingTypenameDeclCheck; // expected-note{{in instantiation of template class}} 42 43 44template<typename T, typename U> 45struct PseudoDestructorExprTester { 46 void f(T *t) { 47 t->T::template Inner<typename add_reference<U>::type 48 * // expected-error{{as a pointer to a reference of type}} 49 >::Blarg::~Blarg(); 50 } 51}; 52 53struct HasInnerTemplate { 54 template<typename T> 55 struct Inner; 56 57 typedef HasInnerTemplate T; 58}; 59 60void PseudoDestructorExprCheck( 61 PseudoDestructorExprTester<HasInnerTemplate, float> tester) { 62 tester.f(0); // expected-note{{in instantiation of member function}} 63} 64 65template<typename T> 66struct DependentScopedDeclRefExpr { 67 void f() { 68 outer_alias::inner::X0<typename add_reference<T>::type 69 * // expected-error{{as a pointer to a reference of type}} 70 >::value = 17; 71 } 72}; 73 74void DependentScopedDeclRefExprCheck(DependentScopedDeclRefExpr<int> t) { 75 t.f(); // expected-note{{in instantiation of member function}} 76} 77