@@ -35,16 +35,15 @@ ConceptSpecializationExpr::ConceptSpecializationExpr(
3535 SourceLocation TemplateKWLoc, DeclarationNameInfo ConceptNameInfo,
3636 NamedDecl *FoundDecl, ConceptDecl *NamedConcept,
3737 const ASTTemplateArgumentListInfo *ArgsAsWritten,
38- ArrayRef<TemplateArgument> ConvertedArgs ,
38+ ImplicitConceptSpecializationDecl *SpecDecl ,
3939 const ConstraintSatisfaction *Satisfaction)
4040 : Expr(ConceptSpecializationExprClass, C.BoolTy, VK_PRValue, OK_Ordinary),
4141 ConceptReference(NNS, TemplateKWLoc, ConceptNameInfo, FoundDecl,
4242 NamedConcept, ArgsAsWritten),
43- NumTemplateArgs(ConvertedArgs.size() ),
43+ SpecDecl(SpecDecl ),
4444 Satisfaction(Satisfaction
4545 ? ASTConstraintSatisfaction::Create(C, *Satisfaction)
4646 : nullptr) {
47- setTemplateArguments (ConvertedArgs);
4847 setDependence (computeDependence (this , /* ValueDependent=*/ !Satisfaction));
4948
5049 // Currently guaranteed by the fact concepts can only be at namespace-scope.
@@ -56,50 +55,34 @@ ConceptSpecializationExpr::ConceptSpecializationExpr(
5655 " should not be value-dependent" );
5756}
5857
59- ConceptSpecializationExpr::ConceptSpecializationExpr (EmptyShell Empty,
60- unsigned NumTemplateArgs)
61- : Expr(ConceptSpecializationExprClass, Empty),
62- NumTemplateArgs(NumTemplateArgs) {}
58+ ConceptSpecializationExpr::ConceptSpecializationExpr (EmptyShell Empty)
59+ : Expr(ConceptSpecializationExprClass, Empty) {}
6360
64- void ConceptSpecializationExpr::setTemplateArguments (
65- ArrayRef<TemplateArgument> Converted) {
66- assert (Converted.size () == NumTemplateArgs);
67- std::uninitialized_copy (Converted.begin (), Converted.end (),
68- getTrailingObjects<TemplateArgument>());
69- }
70-
71- ConceptSpecializationExpr *
72- ConceptSpecializationExpr::Create (const ASTContext &C,
73- NestedNameSpecifierLoc NNS,
74- SourceLocation TemplateKWLoc,
75- DeclarationNameInfo ConceptNameInfo,
76- NamedDecl *FoundDecl,
77- ConceptDecl *NamedConcept,
78- const ASTTemplateArgumentListInfo *ArgsAsWritten,
79- ArrayRef<TemplateArgument> ConvertedArgs,
80- const ConstraintSatisfaction *Satisfaction) {
81- void *Buffer = C.Allocate (totalSizeToAlloc<TemplateArgument>(
82- ConvertedArgs.size ()));
83- return new (Buffer) ConceptSpecializationExpr (C, NNS, TemplateKWLoc,
84- ConceptNameInfo, FoundDecl,
85- NamedConcept, ArgsAsWritten,
86- ConvertedArgs, Satisfaction);
61+ ConceptSpecializationExpr *ConceptSpecializationExpr::Create (
62+ const ASTContext &C, NestedNameSpecifierLoc NNS,
63+ SourceLocation TemplateKWLoc, DeclarationNameInfo ConceptNameInfo,
64+ NamedDecl *FoundDecl, ConceptDecl *NamedConcept,
65+ const ASTTemplateArgumentListInfo *ArgsAsWritten,
66+ ImplicitConceptSpecializationDecl *SpecDecl,
67+ const ConstraintSatisfaction *Satisfaction) {
68+ return new (C) ConceptSpecializationExpr (
69+ C, NNS, TemplateKWLoc, ConceptNameInfo, FoundDecl, NamedConcept,
70+ ArgsAsWritten, SpecDecl, Satisfaction);
8771}
8872
8973ConceptSpecializationExpr::ConceptSpecializationExpr (
9074 const ASTContext &C, ConceptDecl *NamedConcept,
91- ArrayRef<TemplateArgument> ConvertedArgs ,
75+ ImplicitConceptSpecializationDecl *SpecDecl ,
9276 const ConstraintSatisfaction *Satisfaction, bool Dependent,
9377 bool ContainsUnexpandedParameterPack)
9478 : Expr(ConceptSpecializationExprClass, C.BoolTy, VK_PRValue, OK_Ordinary),
9579 ConceptReference(NestedNameSpecifierLoc(), SourceLocation(),
9680 DeclarationNameInfo(), NamedConcept, NamedConcept,
9781 nullptr),
98- NumTemplateArgs(ConvertedArgs.size() ),
82+ SpecDecl(SpecDecl ),
9983 Satisfaction(Satisfaction
10084 ? ASTConstraintSatisfaction::Create(C, *Satisfaction)
10185 : nullptr) {
102- setTemplateArguments (ConvertedArgs);
10386 ExprDependence D = ExprDependence::None;
10487 if (!Satisfaction)
10588 D |= ExprDependence::Value;
@@ -110,26 +93,14 @@ ConceptSpecializationExpr::ConceptSpecializationExpr(
11093 setDependence (D);
11194}
11295
113- ConceptSpecializationExpr *
114- ConceptSpecializationExpr::Create (const ASTContext &C,
115- ConceptDecl *NamedConcept,
116- ArrayRef<TemplateArgument> ConvertedArgs,
117- const ConstraintSatisfaction *Satisfaction,
118- bool Dependent,
119- bool ContainsUnexpandedParameterPack) {
120- void *Buffer = C.Allocate (totalSizeToAlloc<TemplateArgument>(
121- ConvertedArgs.size ()));
122- return new (Buffer) ConceptSpecializationExpr (
123- C, NamedConcept, ConvertedArgs, Satisfaction, Dependent,
124- ContainsUnexpandedParameterPack);
125- }
126-
127- ConceptSpecializationExpr *
128- ConceptSpecializationExpr::Create (ASTContext &C, EmptyShell Empty,
129- unsigned NumTemplateArgs) {
130- void *Buffer = C.Allocate (totalSizeToAlloc<TemplateArgument>(
131- NumTemplateArgs));
132- return new (Buffer) ConceptSpecializationExpr (Empty, NumTemplateArgs);
96+ ConceptSpecializationExpr *ConceptSpecializationExpr::Create (
97+ const ASTContext &C, ConceptDecl *NamedConcept,
98+ ImplicitConceptSpecializationDecl *SpecDecl,
99+ const ConstraintSatisfaction *Satisfaction, bool Dependent,
100+ bool ContainsUnexpandedParameterPack) {
101+ return new (C)
102+ ConceptSpecializationExpr (C, NamedConcept, SpecDecl, Satisfaction,
103+ Dependent, ContainsUnexpandedParameterPack);
133104}
134105
135106const TypeConstraint *
0 commit comments