@@ -206,3 +206,37 @@ using ET = E<1, 3>;
206
206
// CHECK: `-TemplateArgument expr
207
207
// CHECK-NOT: Subst
208
208
// CHECK: `-DeclRefExpr {{.*}} 'int' NonTypeTemplateParm [[M2]] 'M2' 'int'
209
+
210
+ template <char = ' x' > struct F ;
211
+
212
+ template <char > struct F {
213
+ template <typename U>
214
+ requires (false ) F(U);
215
+ template <typename U>
216
+ requires (true ) F(U);
217
+ };
218
+
219
+ F s (0 );
220
+
221
+ // CHECK-LABEL: Dumping <deduction guide for F>:
222
+ // CHECK: FunctionTemplateDecl
223
+ // CHECK: |-NonTypeTemplateParmDecl {{.*}} 'char' depth 0 index 0
224
+ // CHECK: `-TemplateArgument expr
225
+ // CHECK: | |-inherited from NonTypeTemplateParm {{.*}} '' 'char'
226
+ // CHECK: | `-ConstantExpr {{.*}} 'char'
227
+ // CHECK: | |-value: Int 120
228
+ // CHECK: | `-CharacterLiteral {{.*}} 'char' 120
229
+ // CHECK: |-TemplateTypeParmDecl {{.*}} typename depth 0 index 1 U
230
+ // CHECK: |-ParenExpr {{.*}} 'bool'
231
+ // CHECK: | `-CXXBoolLiteralExpr {{.*}} 'bool' false
232
+ // CHECK: |-CXXDeductionGuideDecl {{.*}} implicit <deduction guide for F> 'auto (type-parameter-0-1) -> F<>'
233
+ // CHECK: | `-ParmVarDecl {{.*}} 'type-parameter-0-1'
234
+ // CHECK: `-CXXDeductionGuideDecl {{.*}} implicit <deduction guide for F> 'auto (int) -> F<'x'>'
235
+ // CHECK: |-TemplateArgument integral 120
236
+ // CHECK: |-TemplateArgument type 'int'
237
+ // CHECK: | `-BuiltinType {{.*}} 'int'
238
+ // CHECK: `-ParmVarDecl {{.*}} 'int':'int'
239
+ // CHECK: FunctionProtoType {{.*}} 'auto (type-parameter-0-1) -> F<>' dependent trailing_return cdecl
240
+ // CHECK: |-InjectedClassNameType {{.*}} 'F<>' dependent
241
+ // CHECK: | `-CXXRecord {{.*}} 'F'
242
+ // CHECK: `-TemplateTypeParmType {{.*}} 'type-parameter-0-1' dependent depth 0 index 1
0 commit comments