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
7 template<typename T
> class C0
{};
8 template<> class C0
<long> {};
9 template<> class C0
<long*> {};
12 template<int N
> class C1
{};
13 template<> class C1
<11> {};
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
> {};
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 {};
33 // Partial specializations
35 template<typename T
, typename U
> struct C20
{
39 template<typename T
> struct C20
<T
, int> {
43 template<int N
, typename U
> struct C21
{
47 template<int N
> struct C21
<N
, int> {
51 template<template<typename T2
> class TC
, typename U
> struct C22
{
55 template<template<typename T2
> class TC
> struct C22
<TC
, int> {
61 template<typename T
> class C30
;
62 template<> class C30
<long>;
63 template<> class C30
<long*>;