PR37680: fix faulty assertion condition.

When looking up a template name, we can find an overload set containing a
function template and an unresolved non-type using declaration.

llvm-svn: 334106
This commit is contained in:
Richard Smith 2018-06-06 16:36:56 +00:00
parent 8cb6a521be
commit ef53a3e2b6
2 changed files with 13 additions and 0 deletions

View File

@ -7292,6 +7292,7 @@ ASTContext::getOverloadedTemplateName(UnresolvedSetIterator Begin,
for (UnresolvedSetIterator I = Begin; I != End; ++I) {
NamedDecl *D = *I;
assert(isa<FunctionTemplateDecl>(D) ||
isa<UnresolvedUsingValueDecl>(D) ||
(isa<UsingShadowDecl>(D) &&
isa<FunctionTemplateDecl>(D->getUnderlyingDecl())));
*Storage++ = D;

View File

@ -447,3 +447,15 @@ namespace DependentUnresolvedUsingTemplate {
xb.h(); // expected-note {{instantiation of}}
}
}
namespace PR37680 {
template <class a> struct b : a {
using a::add;
template<int> int add() { return this->template add(0); }
};
struct a {
template<typename T = void> int add(...);
void add(int);
};
int f(b<a> ba) { return ba.add<0>(); }
}