diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/AST/ASTContext.cpp | 1 | ||||
-rw-r--r-- | clang/test/SemaTemplate/dependent-names.cpp | 12 |
2 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index c759c96be5b..64f45af6189 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -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; diff --git a/clang/test/SemaTemplate/dependent-names.cpp b/clang/test/SemaTemplate/dependent-names.cpp index 05ef33b535a..67ef238083f 100644 --- a/clang/test/SemaTemplate/dependent-names.cpp +++ b/clang/test/SemaTemplate/dependent-names.cpp @@ -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>(); } +} |