[AMDGPU] Removed superfluous predicate. NFC.
[llvm-project.git] / clang / test / SemaTemplate / template-id-printing.cpp
blob047589b1ce4333ce280ecd4739950a205366ea1d
1 // RUN: %clang_cc1 -fsyntax-only -ast-print %s | FileCheck %s
2 namespace N {
3 template<typename T, typename U> void f(U);
4 template<int> void f();
7 void g() {
8 // CHECK: N::f<int>(3.14
9 N::f<int>(3.14);
11 // CHECK: N::f<double>
12 void (*fp)(int) = N::f<double>;
16 // (NNS qualified) DeclRefExpr.
17 namespace DRE {
19 template <typename T>
20 void foo();
22 void test() {
23 // CHECK: DRE::foo<int>;
24 DRE::foo<int>;
25 // CHECK: DRE::template foo<int>;
26 DRE::template foo<int>;
27 // CHECK: DRE::foo<int>();
28 DRE::foo<int>();
29 // CHECK: DRE::template foo<int>();
30 DRE::template foo<int>();
33 } // namespace DRE
36 // MemberExpr.
37 namespace ME {
39 struct S {
40 template <typename T>
41 void mem();
44 void test() {
45 S s;
46 // CHECK: s.mem<int>();
47 s.mem<int>();
48 // CHECK: s.template mem<int>();
49 s.template mem<int>();
52 } // namespace ME
55 // UnresolvedLookupExpr.
56 namespace ULE {
58 template <typename T>
59 int foo();
61 template <typename T>
62 void test() {
63 // CHECK: ULE::foo<T>;
64 ULE::foo<T>;
65 // CHECK: ULE::template foo<T>;
66 ULE::template foo<T>;
69 } // namespace ULE
72 // UnresolvedMemberExpr.
73 namespace UME {
75 struct S {
76 template <typename T>
77 void mem();
80 template <typename U>
81 void test() {
82 S s;
83 // CHECK: s.mem<U>();
84 s.mem<U>();
85 // CHECK: s.template mem<U>();
86 s.template mem<U>();
89 } // namespace UME
92 // DependentScopeDeclRefExpr.
93 namespace DSDRE {
95 template <typename T>
96 struct S;
98 template <typename T>
99 void test() {
100 // CHECK: S<T>::foo;
101 S<T>::foo;
102 // CHECK: S<T>::template foo;
103 S<T>::template foo;
104 // CHECK: S<T>::template foo<>;
105 S<T>::template foo<>;
106 // CHECK: S<T>::template foo<T>;
107 S<T>::template foo<T>;
110 } // namespace DSDRE
113 // DependentScopeMemberExpr.
114 namespace DSME {
116 template <typename T>
117 struct S;
119 template <typename T>
120 void test() {
121 S<T> s;
122 // CHECK: s.foo;
123 s.foo;
124 // CHECK: s.template foo;
125 s.template foo;
126 // CHECK: s.template foo<>;
127 s.template foo<>;
128 // CHECK: s.template foo<T>;
129 s.template foo<T>;
132 } // namespace DSME
134 namespace DSDRE_withImplicitTemplateArgs {
136 template <typename T> void foo() {
137 // CHECK: T::template bar();
138 T::template bar();
141 } // namespace DSDRE_withImplicitTemplateArgs