| Index: lib/Sema/SemaTemplateInstantiateDecl.cpp
|
| diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp
|
| index d1428c51a4f97cae11f8c520c356ebc518141174..42e1757bcbe80279cdad40f547180cbd5a9f4b4d 100644
|
| --- a/lib/Sema/SemaTemplateInstantiateDecl.cpp
|
| +++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp
|
| @@ -1558,36 +1558,10 @@ TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D,
|
| Constructor->isExplicit(),
|
| Constructor->isInlineSpecified(),
|
| false, Constructor->isConstexpr());
|
| -
|
| // Claim that the instantiation of a constructor or constructor template
|
| // inherits the same constructor that the template does.
|
| - if (CXXConstructorDecl *Inh = const_cast<CXXConstructorDecl *>(
|
| - Constructor->getInheritedConstructor())) {
|
| - // If we're instantiating a specialization of a function template, our
|
| - // "inherited constructor" will actually itself be a function template.
|
| - // Instantiate a declaration of it, too.
|
| - if (FunctionTemplate) {
|
| - assert(!TemplateParams && Inh->getDescribedFunctionTemplate() &&
|
| - !Inh->getParent()->isDependentContext() &&
|
| - "inheriting constructor template in dependent context?");
|
| - Sema::InstantiatingTemplate Inst(SemaRef, Constructor->getLocation(),
|
| - Inh);
|
| - if (Inst)
|
| - return 0;
|
| - Sema::ContextRAII SavedContext(SemaRef, Inh->getDeclContext());
|
| - LocalInstantiationScope LocalScope(SemaRef);
|
| -
|
| - // Use the same template arguments that we deduced for the inheriting
|
| - // constructor. There's no way they could be deduced differently.
|
| - MultiLevelTemplateArgumentList InheritedArgs;
|
| - InheritedArgs.addOuterTemplateArguments(TemplateArgs.getInnermost());
|
| - Inh = cast_or_null<CXXConstructorDecl>(
|
| - SemaRef.SubstDecl(Inh, Inh->getDeclContext(), InheritedArgs));
|
| - if (!Inh)
|
| - return 0;
|
| - }
|
| + if (const CXXConstructorDecl *Inh = Constructor->getInheritedConstructor())
|
| cast<CXXConstructorDecl>(Method)->setInheritedConstructor(Inh);
|
| - }
|
| } else if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(D)) {
|
| Method = CXXDestructorDecl::Create(SemaRef.Context, Record,
|
| StartLoc, NameInfo, T, TInfo,
|
|
|