diff options
author | Abramo Bagnara <abramo.bagnara@gmail.com> | 2012-01-28 11:04:22 +0000 |
---|---|---|
committer | Abramo Bagnara <abramo.bagnara@gmail.com> | 2012-01-28 11:04:22 +0000 |
commit | bd2b6f0e57e2380bd992f50af434a9970d8e23bb (patch) | |
tree | 2e5f314f4d637c179c600c04d2fe212fd48d4762 | |
parent | 82e6411d004064a29f03a3ea8b8919f297bfa843 (diff) |
Added tests for template keyword presence.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149177 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/SemaTemplate/template-id-printing.cpp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/test/SemaTemplate/template-id-printing.cpp b/test/SemaTemplate/template-id-printing.cpp index fcd4974a76..3b9e25196d 100644 --- a/test/SemaTemplate/template-id-printing.cpp +++ b/test/SemaTemplate/template-id-printing.cpp @@ -11,3 +11,122 @@ void g() { // CHECK: N::f<double> void (*fp)(int) = N::f<double>; } + + +// (NNS qualified) DeclRefExpr. +namespace DRE { + +template <typename T> +void foo(); + +void test() { + // CHECK: DRE::foo<int>; + DRE::foo<int>; + // CHECK: DRE::template foo<int>; + DRE::template foo<int>; + // CHECK: DRE::foo<int>(); + DRE::foo<int>(); + // CHECK: DRE::template foo<int>(); + DRE::template foo<int>(); +} + +} // namespace DRE + + +// MemberExpr. +namespace ME { + +struct S { + template <typename T> + void mem(); +}; + +void test() { + S s; + // CHECK: s.mem<int>(); + s.mem<int>(); + // CHECK: s.template mem<int>(); + s.template mem<int>(); +} + +} // namespace ME + + +// UnresolvedLookupExpr. +namespace ULE { + +template <typename T> +int foo(); + +template <typename T> +void test() { + // CHECK: ULE::foo<T>; + ULE::foo<T>; + // CHECK: ULE::template foo<T>; + ULE::template foo<T>; +} + +} // namespace ULE + + +// UnresolvedMemberExpr. +namespace UME { + +struct S { + template <typename T> + void mem(); +}; + +template <typename U> +void test() { + S s; + // CHECK: s.mem<U>(); + s.mem<U>(); + // CHECK: s.template mem<U>(); + s.template mem<U>(); +} + +} // namespace UME + + +// DependentScopeDeclRefExpr. +namespace DSDRE { + +template <typename T> +struct S; + +template <typename T> +void test() { + // CHECK: S<T>::foo; + S<T>::foo; + // CHECK: S<T>::template foo; + S<T>::template foo; + // CHECK: S<T>::template foo<>; + S<T>::template foo<>; + // CHECK: S<T>::template foo<T>; + S<T>::template foo<T>; +} + +} // namespace DSDRE + + +// DependentScopeMemberExpr. +namespace DSME { + +template <typename T> +struct S; + +template <typename T> +void test() { + S<T> s; + // CHECK: s.foo; + s.foo; + // CHECK: s.template foo; + s.template foo; + // CHECK: s.template foo<>; + s.template foo<>; + // CHECK: s.template foo<T>; + s.template foo<T>; +} + +} // namespace DSME |