Clang Project

clang_source_code/test/Coverage/ast-print-temp-class.cpp
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
7template<typename T> class C0 {};
8template<> class C0<long> {};
9template<> class C0<long*> {};
10C0<int> c0;
11
12template<int N> class C1 {};
13template<> class C1<11> {};
14C1<2> c1a;
15C1<4> c1b;
16
17template<typename T> class C2a {};
18template<typename T> class C2b {};
19template<template<typename T> class TC> class C2 {};
20template<> class C2<C2a> {};
21C2<C2b> c2;
22
23
24// Default arguments
25
26template<typename T = int> class C10 {};
27template<int N = 10> class C11 {};
28template<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
35template<typename T, typename U> struct C20 {
36    T a;
37    U b;
38};
39template<typename T> struct C20<T, int> {
40    T a;
41};
42
43template<int N, typename U> struct C21 {
44    U a;
45    U b[N];
46};
47template<int N> struct C21<N, int> {
48    int a[N];
49};
50
51template<template<typename T2> class TC, typename U> struct C22 {
52    TC<U> a;
53    U b;
54};
55template<template<typename T2> class TC> struct C22<TC, int> {
56    TC<int> a;
57};
58
59
60// Declaration only
61template<typename T> class C30;
62template<> class C30<long>;
63template<> class C30<long*>;
64extern C30<int> c30;
65