brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · a5a0e4d Raw
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