From cbebd6226dbdd796ed35b40bd35aeb60bf1ada09 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Mon, 14 May 2018 20:52:48 +0000 Subject: Fix regression in r332076. If the name after 'template' is an unresolved using declaration (not containing 'typename'), then we don't yet know if it's a valid template-name, so don't reject it prior to instantiation. Instead, treat it as naming a dependent member of the current instantiation. llvm-svn: 332291 --- clang/test/SemaTemplate/dependent-names.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'clang/test/SemaTemplate/dependent-names.cpp') diff --git a/clang/test/SemaTemplate/dependent-names.cpp b/clang/test/SemaTemplate/dependent-names.cpp index 070c7e410f1..05ef33b535a 100644 --- a/clang/test/SemaTemplate/dependent-names.cpp +++ b/clang/test/SemaTemplate/dependent-names.cpp @@ -427,3 +427,23 @@ namespace DependentTemplateIdWithNoArgs { }; void g() { f(); } } + +namespace DependentUnresolvedUsingTemplate { + template + struct X : T { + using T::foo; + void f() { this->template foo(); } // expected-error {{does not refer to a template}} + void g() { this->template foo<>(); } // expected-error {{does not refer to a template}} + void h() { this->template foo(); } // expected-error {{does not refer to a template}} + }; + struct A { template int foo(); }; + struct B { int foo(); }; // expected-note 3{{non-template here}} + void test(X xa, X xb) { + xa.f(); + xa.g(); + xa.h(); + xb.f(); // expected-note {{instantiation of}} + xb.g(); // expected-note {{instantiation of}} + xb.h(); // expected-note {{instantiation of}} + } +} -- cgit v1.2.3