55 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-unknown-unknown -std=c++17 -ast-dump %s | FileCheck -strict-whitespace %s2 3// Tests to verify we construct correct using template names.4// TemplateNames are not dumped, so the sugar here isn't obvious. However5// the "using" on the TemplateSpecializationTypes shows that the6// UsingTemplateName is present.7namespace ns {8template<typename T> class S {9 public:10 S(T);11};12template<typename T> struct S2 { S2(T); };13template <typename T> S2(T t) -> S2<T>;14}15using ns::S;16using ns::S2;17 18// TemplateName in TemplateSpecializationType.19template<typename T>20using A = S<T>;21// CHECK: TypeAliasDecl22// CHECK-NEXT: `-TemplateSpecializationType {{.*}} 'S<T>' dependent23// CHECK-NEXT: |-name: 'S':'ns::S' qualified24// CHECk-NEXT: | |-UsingShadowDecl {{.+}} ClassTemplate {{.+}} 'S'25 26// TemplateName in TemplateArgument.27template <template <typename> class T> class X {};28using B = X<S>;29// CHECK: TypeAliasDecl30// CHECK-NEXT: `-TemplateSpecializationType {{.*}} 'X<S>' sugar31// CHECK-NEXT: |-name: 'X' qualified32// CHECK-NEXT: | `-ClassTemplateDecl {{.+}} X33// CHECK-NEXT: |-TemplateArgument template 'S':'ns::S' qualified34// CHECK-NEXT: | |-UsingShadowDecl {{.*}} implicit ClassTemplate {{.*}} 'S'35// CHECK-NEXT: | `-target: ClassTemplateDecl {{.*}} S36// CHECK-NEXT: `-RecordType {{.*}} 'X<ns::S>'37// CHECK-NEXT: `-ClassTemplateSpecialization {{.*}} 'X'38 39// TemplateName in DeducedTemplateSpecializationType.40S DeducedTemplateSpecializationT(123);41using C = decltype(DeducedTemplateSpecializationT);42// CHECK: DecltypeType {{.*}}43// CHECK-NEXT: |-DeclRefExpr {{.*}}44// CHECK-NEXT: `-DeducedTemplateSpecializationType {{.*}} 'S<int>' sugar45// CHECK-NEXT: |-name: 'S':'ns::S' qualified46// CHECK-NEXT: | |-UsingShadowDecl {{.+}} 'S'47 48S2 DeducedTemplateSpecializationT2(123);49using D = decltype(DeducedTemplateSpecializationT2);50// CHECK: DecltypeType {{.*}}51// CHECK-NEXT: |-DeclRefExpr {{.*}}52// CHECK-NEXT: `-DeducedTemplateSpecializationType {{.*}} 'S2<int>' sugar53// CHECK-NEXT: |-name: 'S2':'ns::S2' qualified54// CHECk-NEXT: | |-UsingShadowDecl {{.+}} ClassTemplate {{.+}} 'S2'55