// RUN: %clang_cc1 -fsyntax-only -verify %s // Note: the formatting in this test case is intentionally funny, with // nested-name-specifiers stretched out vertically so that we can // match up diagnostics per-line and still verify that we're getting // good source-location information. namespace outer { namespace inner { template struct X0 { }; } } template struct add_reference { typedef T& type; }; namespace outer_alias = outer; template struct UnresolvedUsingValueDeclTester { using outer::inner::X0< typename add_reference::type * // expected-error{{declared as a pointer to a reference of type}} >::value; }; UnresolvedUsingValueDeclTester UnresolvedUsingValueDeclCheck; // expected-note{{in instantiation of template class}} template struct UnresolvedUsingTypenameDeclTester { using outer::inner::X0< typename add_reference::type * // expected-error{{declared as a pointer to a reference of type}} >::value; }; UnresolvedUsingTypenameDeclTester UnresolvedUsingTypenameDeclCheck; // expected-note{{in instantiation of template class}} template struct PseudoDestructorExprTester { void f(T *t) { t->T::template Inner::type * // expected-error{{as a pointer to a reference of type}} >::Blarg::~Blarg(); } }; struct HasInnerTemplate { template struct Inner; typedef HasInnerTemplate T; }; void PseudoDestructorExprCheck( PseudoDestructorExprTester tester) { tester.f(0); // expected-note{{in instantiation of member function}} } template struct DependentScopedDeclRefExpr { void f() { outer_alias::inner::X0::value = 17; } };