@@ -299,3 +299,34 @@ using AFoo = Foo<G<U>>;
299
299
// CHECK-NEXT: `-ParmVarDecl {{.*}} 'G<int>'
300
300
301
301
AFoo aa (G<int >{});
302
+
303
+ namespace TTP {
304
+ template <typename > struct A {};
305
+
306
+ template <class T > struct B {
307
+ template <template <class > typename TT> B (TT<T>);
308
+ };
309
+
310
+ B b (A<int >{});
311
+ } // namespace TTP
312
+
313
+ // CHECK-LABEL: Dumping TTP::<deduction guide for B>:
314
+ // CHECK-NEXT: FunctionTemplateDecl 0x{{.+}} <{{.+}}:[[# @LINE - 7]]:5, col:51>
315
+ // CHECK-NEXT: |-TemplateTypeParmDecl {{.+}} class depth 0 index 0 T{{$}}
316
+ // CHECK-NEXT: |-TemplateTemplateParmDecl {{.+}} depth 0 index 1 TT{{$}}
317
+ // CHECK-NEXT: | `-TemplateTypeParmDecl {{.+}} class depth 1 index 0{{$}}
318
+ // CHECK-NEXT: |-CXXDeductionGuideDecl {{.+}} 'auto (<T>) -> B<T>'{{$}}
319
+ // CHECK-NEXT: | `-ParmVarDecl {{.+}} '<T>'{{$}}
320
+ // CHECK-NEXT: `-CXXDeductionGuideDecl {{.+}} 'auto (A<int>) -> TTP::B<int>'
321
+ // CHECK-NEXT: |-TemplateArgument type 'int'
322
+ // CHECK-NEXT: | `-BuiltinType {{.+}} 'int'{{$}}
323
+ // CHECK-NEXT: |-TemplateArgument template A
324
+ // CHECK-NEXT: `-ParmVarDecl {{.+}} 'A<int>':'TTP::A<int>'{{$}}
325
+ // CHECK-NEXT: FunctionProtoType {{.+}} 'auto (<T>) -> B<T>' dependent trailing_return cdecl{{$}}
326
+ // CHECK-NEXT: |-InjectedClassNameType {{.+}} 'B<T>' dependent{{$}}
327
+ // CHECK-NEXT: | `-CXXRecord {{.+}} 'B'{{$}}
328
+ // CHECK-NEXT: `-ElaboratedType {{.+}} '<T>' sugar dependent{{$}}
329
+ // CHECK-NEXT: `-TemplateSpecializationType {{.+}} '<T>' dependent {{$}}
330
+ // CHECK-NEXT: `-TemplateArgument type 'T'{{$}}
331
+ // CHECK-NEXT: `-TemplateTypeParmType {{.+}} 'T' dependent depth 0 index 0{{$}}
332
+ // CHECK-NEXT: `-TemplateTypeParm {{.+}} 'T'{{$}}
0 commit comments