@@ -69,8 +69,8 @@ class ExtractTypeForDeductionGuide
6969 ExtractTypeForDeductionGuide (
7070 Sema &SemaRef,
7171 llvm::SmallVectorImpl<TypedefNameDecl *> &MaterializedTypedefs,
72- ClassTemplateDecl *NestedPattern,
73- const MultiLevelTemplateArgumentList *OuterInstantiationArgs)
72+ ClassTemplateDecl *NestedPattern = nullptr ,
73+ const MultiLevelTemplateArgumentList *OuterInstantiationArgs = nullptr )
7474 : Base(SemaRef), MaterializedTypedefs(MaterializedTypedefs),
7575 NestedPattern (NestedPattern),
7676 OuterInstantiationArgs(OuterInstantiationArgs) {
@@ -1263,10 +1263,25 @@ FunctionTemplateDecl *DeclareAggregateDeductionGuideForTypeAlias(
12631263 getRHSTemplateDeclAndArgs (SemaRef, AliasTemplate).first ;
12641264 if (!RHSTemplate)
12651265 return nullptr ;
1266+
1267+ llvm::SmallVector<TypedefNameDecl *> TypedefDecls;
1268+ llvm::SmallVector<QualType> NewParamTypes;
1269+ ExtractTypeForDeductionGuide TypeAliasTransformer (SemaRef, TypedefDecls);
1270+ for (QualType P : ParamTypes) {
1271+ QualType Type = TypeAliasTransformer.TransformType (P);
1272+ if (Type.isNull ())
1273+ return nullptr ;
1274+ NewParamTypes.push_back (Type);
1275+ }
1276+
12661277 auto *RHSDeductionGuide = SemaRef.DeclareAggregateDeductionGuideFromInitList (
1267- RHSTemplate, ParamTypes , Loc);
1278+ RHSTemplate, NewParamTypes , Loc);
12681279 if (!RHSDeductionGuide)
12691280 return nullptr ;
1281+
1282+ for (TypedefNameDecl *TD : TypedefDecls)
1283+ TD->setDeclContext (RHSDeductionGuide->getTemplatedDecl ());
1284+
12701285 return BuildDeductionGuideForTypeAlias (SemaRef, AliasTemplate,
12711286 RHSDeductionGuide, Loc);
12721287}
0 commit comments