When looking up a template name, we can find an overload set containing a
function template and an unresolved non-type using declaration.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@334106
91177308-0d34-0410-b5e6-
96231b3b80d8
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;
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>(); }
+}