From: Richard Smith Date: Wed, 6 Apr 2016 17:38:58 +0000 (+0000) Subject: Diagnose template alias declarations in local classes. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=088143d34b105b09c3ddf067121f98e3658a4ef3;p=clang Diagnose template alias declarations in local classes. Patch by Erik Pilkington! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@265571 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index e7c3b6af02..995378c073 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -8585,6 +8585,10 @@ Decl *Sema::ActOnAliasDeclaration(Scope *S, } TemplateParameterList *TemplateParams = TemplateParamLists[0]; + // Check that we can declare a template here. + if (CheckTemplateDeclScope(S, TemplateParams)) + return nullptr; + // Only consider previous declarations in the same scope. FilterLookupForScope(Previous, CurContext, S, /*ConsiderLinkage*/false, /*ExplicitInstantiationOrSpecialization*/false); diff --git a/test/CXX/temp/temp.decls/temp.mem/p2.cpp b/test/CXX/temp/temp.decls/temp.mem/p2.cpp index c24d5a9b50..feeb362e34 100644 --- a/test/CXX/temp/temp.decls/temp.mem/p2.cpp +++ b/test/CXX/temp/temp.decls/temp.mem/p2.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s +// RUN: %clang_cc1 -std=c++14 -fsyntax-only -verify %s template void quux(); @@ -8,5 +8,7 @@ void fun() { template struct bar {}; // expected-error{{templates cannot be declared inside of a local class}} template void baz() {} // expected-error{{templates cannot be declared inside of a local class}} template void qux(); // expected-error{{templates cannot be declared inside of a local class}} + template using corge = int; // expected-error{{templates cannot be declared inside of a local class}} + template static T grault; // expected-error{{static data member}} expected-error{{templates cannot be declared inside of a local class}} }; }