| // 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))]; |
| } |