xref: /llvm-project/clang/test/Coverage/ast-print-temp-class.cpp (revision a67a4d2f3c07bd589d395a5815dea2198a261162)
1 // RUN: %clang_cc1 -ast-print -std=c++14 %s -v -o %t.1.cpp
2 // RUN: %clang_cc1 -ast-print -std=c++14 %t.1.cpp -o %t.2.cpp
3 // RUN: diff %t.1.cpp %t.2.cpp
4 
5 // Specializations
6 
7 template<typename T> class C0 {};
8 template<> class C0<long> {};
9 template<> class C0<long*> {};
10 C0<int> c0;
11 
12 template<int N> class C1 {};
13 template<> class C1<11> {};
14 C1<2> c1a;
15 C1<4> c1b;
16 
17 template<typename T> class C2a {};
18 template<typename T> class C2b {};
19 template<template<typename T> class TC> class C2 {};
20 template<> class C2<C2a> {};
21 C2<C2b> c2;
22 
23 
24 // Default arguments
25 
26 template<typename T = int> class C10 {};
27 template<int N = 10> class C11 {};
28 template<typename T, int N = 22> class C12a {};
29 //FIXME: template<template<typename T, int N> class TC = C12a> class C12 {};
30 //FIXME: template<template<typename T> class TC = C12a> class C13 {};
31 
32 
33 // Partial specializations
34 
35 template<typename T, typename U> struct C20 {
36     T a;
37     U b;
38 };
39 template<typename T> struct C20<T, int> {
40     T a;
41 };
42 
43 template<int N, typename U> struct C21 {
44     U a;
45     U b[N];
46 };
47 template<int N> struct C21<N, int> {
48     int a[N];
49 };
50 
51 template<template<typename T2> class TC, typename U> struct C22 {
52     TC<U> a;
53     U b;
54 };
55 template<template<typename T2> class TC> struct C22<TC, int> {
56     TC<int> a;
57 };
58 
59 
60 // Declaration only
61 template<typename T> class C30;
62 template<> class C30<long>;
63 template<> class C30<long*>;
64 extern C30<int> c30;
65