Slight tweak to alias template error handling: don't guess that a template-id in an alias declaration was meant to be a specialization. Use a generic, but more accurate, diagnostic.

llvm-svn: 130961
This commit is contained in:
Richard Smith 2011-05-05 22:36:10 +00:00
parent b79646cb2e
commit 14034026d6
2 changed files with 3 additions and 3 deletions

View File

@ -396,7 +396,8 @@ Decl *Parser::ParseUsingDeclaration(unsigned Context,
// Type alias templates cannot be specialized.
int SpecKind = -1;
if (Name.getKind() == UnqualifiedId::IK_TemplateId)
if (TemplateInfo.Kind == ParsedTemplateInfo::Template &&
Name.getKind() == UnqualifiedId::IK_TemplateId)
SpecKind = 0;
if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitSpecialization)
SpecKind = 1;

View File

@ -4,5 +4,4 @@ template<typename T> using A = int;
template<typename T> using A<T*> = char; // expected-error {{partial specialization of alias templates is not permitted}}
template<> using A<char> = char; // expected-error {{explicit specialization of alias templates is not permitted}}
template using A<char> = char; // expected-error {{explicit instantiation of alias templates is not permitted}}
// Best guess as to what the user was trying to do: missing template<>.
using A<char> = char; // expected-error {{partial specialization of alias templates is not permitted}}
using A<char> = char; // expected-error {{name defined in alias declaration must be an identifier}}