112 lines
2.7 KiB
C++
112 lines
2.7 KiB
C++
// 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))];
|
|
}
|