aboutsummaryrefslogtreecommitdiff
path: root/test/Coverage/ast-print-temp-class.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/Coverage/ast-print-temp-class.cpp')
-rw-r--r--test/Coverage/ast-print-temp-class.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/test/Coverage/ast-print-temp-class.cpp b/test/Coverage/ast-print-temp-class.cpp
new file mode 100644
index 000000000000..f6b94efb927f
--- /dev/null
+++ b/test/Coverage/ast-print-temp-class.cpp
@@ -0,0 +1,64 @@
+// RUN: %clang_cc1 -ast-print -std=c++14 %s -v -o %t.1.cpp
+// RUN: %clang_cc1 -ast-print -std=c++14 %t.1.cpp -o %t.2.cpp
+// RUN: diff %t.1.cpp %t.2.cpp
+
+// Specializations
+
+template<typename T> class C0 {};
+template<> class C0<long> {};
+template<> class C0<long*> {};
+C0<int> c0;
+
+template<int N> class C1 {};
+template<> class C1<11> {};
+C1<2> c1a;
+C1<4> c1b;
+
+template<typename T> class C2a {};
+template<typename T> class C2b {};
+template<template<typename T> class TC> class C2 {};
+template<> class C2<C2a> {};
+C2<C2b> c2;
+
+
+// Default arguments
+
+template<typename T = int> class C10 {};
+template<int N = 10> class C11 {};
+template<typename T, int N = 22> class C12a {};
+//FIXME: template<template<typename T, int N> class TC = C12a> class C12 {};
+//FIXME: template<template<typename T> class TC = C12a> class C13 {};
+
+
+// Partial specializations
+
+template<typename T, typename U> struct C20 {
+ T a;
+ U b;
+};
+template<typename T> struct C20<T, int> {
+ T a;
+};
+
+template<int N, typename U> struct C21 {
+ U a;
+ U b[N];
+};
+template<int N> struct C21<N, int> {
+ int a[N];
+};
+
+template<template<typename T2> class TC, typename U> struct C22 {
+ TC<U> a;
+ U b;
+};
+template<template<typename T2> class TC> struct C22<TC, int> {
+ TC<int> a;
+};
+
+
+// Declaration only
+template<typename T> class C30;
+template<> class C30<long>;
+template<> class C30<long*>;
+extern C30<int> c30;