diff options
author | Zancanaro; Carlo <czan8762@plang3.cs.usyd.edu.au> | 2012-09-24 09:58:17 +1000 |
---|---|---|
committer | Zancanaro; Carlo <czan8762@plang3.cs.usyd.edu.au> | 2012-09-24 09:58:17 +1000 |
commit | 222e2a7620e6520ffaf4fc4e69d79c18da31542e (patch) | |
tree | 7bfbc05bfa3b41c8f9d2e56d53a0bc3e310df239 /clang/test/SemaTemplate/template-id-printing.cpp | |
parent | 3d206f03985b50beacae843d880bccdc91a9f424 (diff) |
Add the clang library to the repo (with some of my changes, too).
Diffstat (limited to 'clang/test/SemaTemplate/template-id-printing.cpp')
-rw-r--r-- | clang/test/SemaTemplate/template-id-printing.cpp | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/clang/test/SemaTemplate/template-id-printing.cpp b/clang/test/SemaTemplate/template-id-printing.cpp new file mode 100644 index 0000000..047589b --- /dev/null +++ b/clang/test/SemaTemplate/template-id-printing.cpp @@ -0,0 +1,141 @@ +// RUN: %clang_cc1 -fsyntax-only -ast-print %s | FileCheck %s +namespace N { + template<typename T, typename U> void f(U); + template<int> void f(); +} + +void g() { + // CHECK: N::f<int>(3.14 + N::f<int>(3.14); + + // 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 + +namespace DSDRE_withImplicitTemplateArgs { + +template <typename T> void foo() { + // CHECK: T::template bar(); + T::template bar(); +} + +} // namespace DSDRE_withImplicitTemplateArgs |