forked from OSchip/llvm-project
Compute the canonical template name when building a template
specialization type for a dependent template name. llvm-svn: 71153
This commit is contained in:
parent
6bc50585e3
commit
ae1e53c87b
|
@ -784,9 +784,10 @@ QualType Sema::CheckTemplateIdType(TemplateName Name,
|
|||
CanonicalizeTemplateArguments(TemplateArgs, NumTemplateArgs,
|
||||
CanonicalTemplateArgs, Context);
|
||||
|
||||
// FIXME: Get the canonical template-name
|
||||
TemplateName CanonName = Context.getCanonicalTemplateName(Name);
|
||||
QualType CanonType
|
||||
= Context.getTemplateSpecializationType(Name, &CanonicalTemplateArgs[0],
|
||||
= Context.getTemplateSpecializationType(CanonName,
|
||||
&CanonicalTemplateArgs[0],
|
||||
CanonicalTemplateArgs.size());
|
||||
|
||||
// Build the dependent template-id type.
|
||||
|
|
|
@ -6,6 +6,7 @@ struct X0 { };
|
|||
template<typename T, typename U>
|
||||
struct X1 {
|
||||
typedef T type;
|
||||
typedef U U_type;
|
||||
|
||||
void f0(T); // expected-note{{previous}}
|
||||
void f0(U);
|
||||
|
@ -23,18 +24,14 @@ struct X1 {
|
|||
void f3(X0<U>*);
|
||||
void f3(::X0<type>*); // expected-error{{redeclar}}
|
||||
|
||||
void f4(typename T::template apply<U>*);
|
||||
void f4(typename T::template apply<U>*); // expected-note{{previous}}
|
||||
void f4(typename U::template apply<U>*);
|
||||
void f4(typename type::template apply<T>*);
|
||||
// FIXME: this is a duplicate of the first f4, but we are not fully
|
||||
// canonicalizing nested-name-specifiers yet.
|
||||
void f4(typename type::template apply<U>*);
|
||||
void f4(typename type::template apply<U_type>*); // expected-error{{redeclar}}
|
||||
|
||||
void f5(typename T::template apply<U>::type*);
|
||||
void f5(typename T::template apply<U>::type*); // expected-note{{previous}}
|
||||
void f5(typename U::template apply<U>::type*);
|
||||
void f5(typename U::template apply<T>::type*);
|
||||
void f5(typename type::template apply<T>::type*);
|
||||
// FIXME: this is a duplicate of the first f5, but we are not fully
|
||||
// canonicalizing nested-name-specifiers yet.
|
||||
void f5(typename type::template apply<U>::type*);
|
||||
void f5(typename type::template apply<U_type>::type*); // expected-error{{redeclar}}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue