58 lines · cpp
1// RUN: %clang_cc1 -std=c++26 -ast-dump -ast-dump-filter=Test %s | FileCheck %s2 3template <template <class> class TT> using N = TT<int>;4 5namespace qualified {6 namespace foo {7 template <class T> struct A;8 } // namespace foo9 using TestQualified = N<foo::A>;10} // namespace qualified11 12// CHECK: Dumping qualified::TestQualified:13// CHECK-NEXT: TypeAliasDecl14// CHECK-NEXT: `-TemplateSpecializationType15// CHECK-NEXT: |-name: 'N' qualified16// CHECK-NEXT: | `-TypeAliasTemplateDecl {{.+}} N{{$}}17// CHECK-NEXT: |-TemplateArgument template 'foo::A':'qualified::foo::A' qualified{{$}}18// CHECK-NEXT: | |-NestedNameSpecifier Namespace 0x{{.+}} 'foo'{{$}}19// CHECK-NEXT: | `-ClassTemplateDecl {{.+}} A{{$}}20 21namespace dependent {22 template <class T> struct B {23 using TestDependent = N<T::template X>;24 };25} // namespace dependent26 27// CHECK: Dumping dependent::B::TestDependent:28// CHECK-NEXT: TypeAliasDecl29// CHECK-NEXT: `-TemplateSpecializationType30// CHECK-NEXT: |-name: 'N' qualified31// CHECK-NEXT: | `-TypeAliasTemplateDecl32// CHECK-NEXT: |-TemplateArgument template 'T::template X':'type-parameter-0-0::template X' dependent{{$}}33// CHECK-NEXT: | `-NestedNameSpecifier TypeSpec 'T'{{$}}34 35namespace subst {36 template <class> struct A;37 38 template <template <class> class TT> struct B {39 template <template <class> class> struct C {};40 using type = C<TT>;41 };42 using TestSubst = B<A>::type;43} // namespace subst44 45// CHECK: Dumping subst::TestSubst:46// CHECK-NEXT: TypeAliasDecl47// CHECK-NEXT: `-TypedefType48// CHECK-NEXT: |-NestedNameSpecifier TypeSpec 'B<A>':'subst::B<subst::A>'49// CHECK-NEXT: |-TypeAlias50// CHECK-NEXT: `-TemplateSpecializationType51// CHECK-NEXT: |-name: 'C':'subst::B<subst::A>::C' qualified52// CHECK-NEXT: | `-ClassTemplateDecl {{.+}} C53// CHECK-NEXT: |-TemplateArgument template 'subst::A' subst index 054// CHECK-NEXT: | |-parameter: TemplateTemplateParmDecl {{.+}} depth 0 index 0 TT{{$}}55// CHECK-NEXT: | |-associated ClassTemplateSpecialization {{.+}} 'B'{{$}}56// CHECK-NEXT: | `-replacement:57// CHECK-NEXT: | `-ClassTemplateDecl {{.+}} A{{$}}58