blob: 1a2e329b2a44411b0695ffa5d88c722ea2db2760 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
// RUN: clang-cc -fsyntax-only -verify %s
#define T(b) (b) ? 1 : -1
#define F(b) (b) ? -1 : 1
struct NonPOD { NonPOD(int); };
// PODs
enum Enum { EV };
struct POD { Enum e; int i; float f; NonPOD* p; };
typedef int Int;
typedef Int IntAr[10];
class Statics { static int priv; static NonPOD np; };
// Not PODs
struct Derives : POD {};
struct HasCons { HasCons(int); };
struct HasAssign { HasAssign operator =(const HasAssign&); };
struct HasDest { ~HasDest(); };
class HasPriv { int priv; };
class HasProt { protected: int prot; };
struct HasRef { int i; int& ref; HasRef() : i(0), ref(i) {} };
struct HasNonPOD { NonPOD np; };
struct HasVirt { virtual void Virt() {}; };
typedef Derives NonPODAr[10];
void is_pod()
{
int t01[T(__is_pod(int))];
int t02[T(__is_pod(Enum))];
int t03[T(__is_pod(POD))];
int t04[T(__is_pod(Int))];
int t05[T(__is_pod(IntAr))];
int t06[T(__is_pod(Statics))];
int t21[F(__is_pod(Derives))];
int t22[F(__is_pod(HasCons))];
int t23[F(__is_pod(HasAssign))];
int t24[F(__is_pod(HasDest))];
int t25[F(__is_pod(HasPriv))];
int t26[F(__is_pod(HasProt))];
int t27[F(__is_pod(HasRef))];
int t28[F(__is_pod(HasNonPOD))];
int t29[F(__is_pod(HasVirt))];
int t30[F(__is_pod(NonPODAr))];
}
union Union { int i; float f; };
typedef Derives ClassType;
void is_class()
{
int t01[T(__is_class(Derives))];
int t02[T(__is_class(HasPriv))];
int t03[T(__is_class(ClassType))];
int t11[F(__is_class(int))];
int t12[F(__is_class(Enum))];
int t13[F(__is_class(Int))];
int t14[F(__is_class(IntAr))];
int t15[F(__is_class(NonPODAr))];
int t16[F(__is_class(Union))];
}
typedef Union UnionAr[10];
typedef Union UnionType;
void is_union()
{
int t01[T(__is_union(Union))];
int t02[T(__is_union(UnionType))];
int t11[F(__is_union(int))];
int t12[F(__is_union(Enum))];
int t13[F(__is_union(Int))];
int t14[F(__is_union(IntAr))];
int t15[F(__is_union(UnionAr))];
}
typedef Enum EnumType;
void is_enum()
{
int t01[T(__is_enum(Enum))];
int t02[T(__is_enum(EnumType))];
int t11[F(__is_enum(int))];
int t12[F(__is_enum(Union))];
int t13[F(__is_enum(Int))];
int t14[F(__is_enum(IntAr))];
int t15[F(__is_enum(UnionAr))];
int t16[F(__is_enum(Derives))];
int t17[F(__is_enum(ClassType))];
}
struct Polymorph { virtual void f(); };
struct InheritPolymorph : Polymorph {};
void is_polymorphic()
{
int t01[T(__is_polymorphic(Polymorph))];
int t02[T(__is_polymorphic(InheritPolymorph))];
int t11[F(__is_polymorphic(int))];
int t12[F(__is_polymorphic(Union))];
int t13[F(__is_polymorphic(Int))];
int t14[F(__is_polymorphic(IntAr))];
int t15[F(__is_polymorphic(UnionAr))];
int t16[F(__is_polymorphic(Derives))];
int t17[F(__is_polymorphic(ClassType))];
int t18[F(__is_polymorphic(Enum))];
}
|