1 // RUN: %clang_cc1 -fsyntax-only -ast-print %s | FileCheck %s
3 template<typename T
, typename U
> void f(U
);
4 template<int> void f();
8 // CHECK: N::f<int>(3.14
11 // CHECK: N::f<double>
12 void (*fp
)(int) = N::f
<double>;
16 // (NNS qualified) DeclRefExpr.
23 // CHECK: DRE::foo<int>;
25 // CHECK: DRE::template foo<int>;
26 DRE::template foo
<int>;
27 // CHECK: DRE::foo<int>();
29 // CHECK: DRE::template foo<int>();
30 DRE::template foo
<int>();
46 // CHECK: s.mem<int>();
48 // CHECK: s.template mem<int>();
49 s
.template mem
<int>();
55 // UnresolvedLookupExpr.
63 // CHECK: ULE::foo<T>;
65 // CHECK: ULE::template foo<T>;
72 // UnresolvedMemberExpr.
85 // CHECK: s.template mem<U>();
92 // DependentScopeDeclRefExpr.
102 // CHECK: 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
>;
113 // DependentScopeMemberExpr.
116 template <typename T
>
119 template <typename T
>
124 // CHECK: s.template foo;
126 // CHECK: s.template foo<>;
128 // CHECK: s.template foo<T>;
134 namespace DSDRE_withImplicitTemplateArgs
{
136 template <typename T
> void foo() {
137 // CHECK: T::template bar();
141 } // namespace DSDRE_withImplicitTemplateArgs