65 lines
1.4 KiB
C++
65 lines
1.4 KiB
C++
|
// 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;
|