@@ -46,24 +46,12 @@ ConceptSpecializationExpr::ConceptSpecializationExpr(const ASTContext &C,
46
46
ASTConstraintSatisfaction::Create (C, *Satisfaction) :
47
47
nullptr) {
48
48
setTemplateArguments (ConvertedArgs);
49
- }
50
-
51
- ConceptSpecializationExpr::ConceptSpecializationExpr (EmptyShell Empty,
52
- unsigned NumTemplateArgs)
53
- : Expr(ConceptSpecializationExprClass, Empty), ConceptReference(),
54
- NumTemplateArgs(NumTemplateArgs) { }
55
-
56
- void ConceptSpecializationExpr::setTemplateArguments (
57
- ArrayRef<TemplateArgument> Converted) {
58
- assert (Converted.size () == NumTemplateArgs);
59
- std::uninitialized_copy (Converted.begin (), Converted.end (),
60
- getTrailingObjects<TemplateArgument>());
61
49
bool IsInstantiationDependent = false ;
62
50
bool ContainsUnexpandedParameterPack = false ;
63
- for (const TemplateArgument& Arg : Converted ) {
64
- if (Arg .isInstantiationDependent ())
51
+ for (const TemplateArgumentLoc& ArgLoc : ArgsAsWritten-> arguments () ) {
52
+ if (ArgLoc. getArgument () .isInstantiationDependent ())
65
53
IsInstantiationDependent = true ;
66
- if (Arg .containsUnexpandedParameterPack ())
54
+ if (ArgLoc. getArgument () .containsUnexpandedParameterPack ())
67
55
ContainsUnexpandedParameterPack = true ;
68
56
if (ContainsUnexpandedParameterPack && IsInstantiationDependent)
69
57
break ;
@@ -80,6 +68,18 @@ void ConceptSpecializationExpr::setTemplateArguments(
80
68
" should not be value-dependent" );
81
69
}
82
70
71
+ ConceptSpecializationExpr::ConceptSpecializationExpr (EmptyShell Empty,
72
+ unsigned NumTemplateArgs)
73
+ : Expr(ConceptSpecializationExprClass, Empty), ConceptReference(),
74
+ NumTemplateArgs(NumTemplateArgs) { }
75
+
76
+ void ConceptSpecializationExpr::setTemplateArguments (
77
+ ArrayRef<TemplateArgument> Converted) {
78
+ assert (Converted.size () == NumTemplateArgs);
79
+ std::uninitialized_copy (Converted.begin (), Converted.end (),
80
+ getTrailingObjects<TemplateArgument>());
81
+ }
82
+
83
83
ConceptSpecializationExpr *
84
84
ConceptSpecializationExpr::Create (const ASTContext &C,
85
85
NestedNameSpecifierLoc NNS,
@@ -98,6 +98,39 @@ ConceptSpecializationExpr::Create(const ASTContext &C,
98
98
ConvertedArgs, Satisfaction);
99
99
}
100
100
101
+ ConceptSpecializationExpr::ConceptSpecializationExpr (
102
+ const ASTContext &C, ConceptDecl *NamedConcept,
103
+ ArrayRef<TemplateArgument> ConvertedArgs,
104
+ const ConstraintSatisfaction *Satisfaction, bool Dependent,
105
+ bool ContainsUnexpandedParameterPack)
106
+ : Expr(ConceptSpecializationExprClass, C.BoolTy, VK_RValue, OK_Ordinary,
107
+ /* TypeDependent=*/ false ,
108
+ /* ValueDependent=*/ !Satisfaction, Dependent,
109
+ ContainsUnexpandedParameterPack),
110
+ ConceptReference(NestedNameSpecifierLoc(), SourceLocation(),
111
+ DeclarationNameInfo(), NamedConcept,
112
+ NamedConcept, nullptr),
113
+ NumTemplateArgs(ConvertedArgs.size()),
114
+ Satisfaction(Satisfaction ?
115
+ ASTConstraintSatisfaction::Create (C, *Satisfaction) :
116
+ nullptr) {
117
+ setTemplateArguments (ConvertedArgs);
118
+ }
119
+
120
+ ConceptSpecializationExpr *
121
+ ConceptSpecializationExpr::Create (const ASTContext &C,
122
+ ConceptDecl *NamedConcept,
123
+ ArrayRef<TemplateArgument> ConvertedArgs,
124
+ const ConstraintSatisfaction *Satisfaction,
125
+ bool Dependent,
126
+ bool ContainsUnexpandedParameterPack) {
127
+ void *Buffer = C.Allocate (totalSizeToAlloc<TemplateArgument>(
128
+ ConvertedArgs.size ()));
129
+ return new (Buffer) ConceptSpecializationExpr (
130
+ C, NamedConcept, ConvertedArgs, Satisfaction, Dependent,
131
+ ContainsUnexpandedParameterPack);
132
+ }
133
+
101
134
ConceptSpecializationExpr *
102
135
ConceptSpecializationExpr::Create (ASTContext &C, EmptyShell Empty,
103
136
unsigned NumTemplateArgs) {
0 commit comments