diff options
Diffstat (limited to 'test/Coverage/ast-print-temp-class.cpp')
-rw-r--r-- | test/Coverage/ast-print-temp-class.cpp | 64 |
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; |