isClassType<int> == 0 test passed
isClassType<long> == 0 test passed
isClassType<short> == 0 test passed
isClassType<char> == 0 test passed
isClassType<long long> == 0 test passed
isClassType<unsigned int> == 0 test passed
isClassType<unsigned long> == 0 test passed
isClassType<unsigned short> == 0 test passed
isClassType<unsigned char> == 0 test passed
isClassType<unsigned long long> == 0 test passed
isClassType<simpleStruct> == 1 test passed
isClassType<polymorphicStruct> == 1 test passed
isClassType<const polymorphicStruct> == 1 test passed
isClassType<const polymorphicStruct&> == 0 test passed
isClassType<e1> == 0 test passed
isClassType<void (*)()> == 0 test passed
isClassType<int const> == 0 test passed
isClassType<int *> == 0 test passed
isClassType<int [4]> == 0 test passed
isClassType<void> == 0 test passed
isPolymorphicType<int> == 0 test passed
isPolymorphicType<long> == 0 test passed
isPolymorphicType<short> == 0 test passed
isPolymorphicType<char> == 0 test passed
isPolymorphicType<long long> == 0 test passed
isPolymorphicType<unsigned int> == 0 test passed
isPolymorphicType<unsigned long> == 0 test passed
isPolymorphicType<unsigned short> == 0 test passed
isPolymorphicType<unsigned char> == 0 test passed
isPolymorphicType<unsigned long long> == 0 test passed
isPolymorphicType<simpleStruct> == 0 test passed
isPolymorphicType<polymorphicStruct> == 1 test passed
isPolymorphicType<const polymorphicStruct> == 1 test passed
isPolymorphicType<const polymorphicStruct&> == 0 test passed
isPolymorphicType<e1> == 0 test passed
isPolymorphicType<void (*)()> == 0 test passed
isPolymorphicType<int const> == 0 test passed
isPolymorphicType<int *> == 0 test passed
isPolymorphicType<int [4]> == 0 test passed
isPolymorphicType<void> == 0 test passed
isPodType<int> == 1 test passed
isPodType<long> == 1 test passed
isPodType<short> == 1 test passed
isPodType<char> == 1 test passed
isPodType<long long> == 1 test passed
isPodType<unsigned int> == 1 test passed
isPodType<unsigned long> == 1 test passed
isPodType<unsigned short> == 1 test passed
isPodType<unsigned char> == 1 test passed
isPodType<unsigned long long> == 1 test passed
isPodType<simpleStruct> == 0 test passed
isPodType<simpleStruct *> == 1 test passed
isPodType<simpleStruct const *> == 1 test passed
isPodType<polymorphicStruct> == 0 test passed
isPodType<e1> == 1 test passed
isPodType<void (*)()> == 1 test passed
isPodType<int const> == 1 test passed
isPodType<int *> == 1 test passed
isPodType<int [4]> == 1 test passed
isPodType<void> == 0 test passed
isPointerType<int> == 0 test passed
isPointerType<long> == 0 test passed
isPointerType<short> == 0 test passed
isPointerType<char> == 0 test passed
isPointerType<long long> == 0 test passed
isPointerType<unsigned int> == 0 test passed
isPointerType<unsigned long> == 0 test passed
isPointerType<unsigned short> == 0 test passed
isPointerType<unsigned char> == 0 test passed
isPointerType<unsigned long long> == 0 test passed
isPointerType<simpleStruct> == 0 test passed
isPointerType<simpleStruct *> == 1 test passed
isPointerType<simpleStruct const *> == 1 test passed
isPointerType<polymorphicStruct> == 0 test passed
isPointerType<e1> == 0 test passed
isPointerType<void (*)()> == 1 test passed
isPointerType<int const> == 0 test passed
isPointerType<int *> == 1 test passed
isPointerType<int [4]> == 1 test passed
isPodType<void> == 0 test passed
int, int                     : isSameType      = 1
int, long long               : isSameType      = 0
simpleStruct, simpleSt       : isSameType      = 1
simpleStruct, polymorp       : isSameType      = 0
int, int const               : isSameType      = 0
const simpleStruct, simpleSt : isSameType      = 0
int *, int [4]               : isSameType      = 0
int, long                    : isConvertible   = 1
long, int                    : isConvertible   = 1
long const, int              : isConvertible   = 1
int*, int const*             : isConvertible   = 1
int const*, int *            : isConvertible   = 0
int&, int const&             : isConvertible   = 1
int const&, int &            : isConvertible   = 0
double, simpleStruct         : isConvertible   = 1
simpleStruct, double*        : isConvertible   = 1
int*, simpleStruct           : isConvertible   = 0
simpleStruct, int*           : isConvertible   = 0
int&, int                    : same<removeRef> = 1
int&, char                   : same<removeRef> = 0
int&, int&                   : same<removeRef> = 1
int , int&                   : same<removeRef> = 1
isConstType<int> = 0
isConstType<int const> = 1
isFunctionType<int> == 0 test passed
isFunctionType<long> == 0 test passed
isFunctionType<short> == 0 test passed
isFunctionType<char> == 0 test passed
isFunctionType<long long> == 0 test passed
isFunctionType<unsigned int> == 0 test passed
isFunctionType<unsigned long> == 0 test passed
isFunctionType<unsigned short> == 0 test passed
isFunctionType<unsigned char> == 0 test passed
isFunctionType<unsigned long long> == 0 test passed
isFunctionType<simpleStruct> == 0 test passed
isFunctionType<simpleStruct *> == 0 test passed
isFunctionType<simpleStruct const *> == 0 test passed
isFunctionType<polymorphicStruct> == 0 test passed
isFunctionType<e1> == 0 test passed
isFunctionType<void (*)()> == 1 test passed
isFunctionType<int const> == 0 test passed
isFunctionType<int *> == 0 test passed
isFunctionType<int [4]> == 0 test passed
isFunctionType<void> == 0 test passed
isSignedType<int> == 1 test passed
isSignedType<long> == 1 test passed
isSignedType<short> == 1 test passed
isSignedType<char> == 1 test passed
isSignedType<long long> == 1 test passed
isSignedType<unsigned int> == 0 test passed
isSignedType<unsigned long> == 0 test passed
isSignedType<unsigned short> == 0 test passed
isSignedType<unsigned char> == 0 test passed
isSignedType<unsigned long long> == 0 test passed
isSignedType<simpleStruct> == 0 test passed
isSignedType<simpleStruct *> == 0 test passed
isSignedType<simpleStruct const *> == 0 test passed
isSignedType<polymorphicStruct> == 0 test passed
isSignedType<e1> == 0 test passed
isSignedType<void (*)()> == 0 test passed
isSignedType<int const> == 1 test passed
isSignedType<int *> == 0 test passed
isSignedType<int [4]> == 0 test passed
isSignedType<void> == 0 test passed
isUnsignedType<int> == 0 test passed
isUnsignedType<long> == 0 test passed
isUnsignedType<short> == 0 test passed
isUnsignedType<char> == 0 test passed
isUnsignedType<long long> == 0 test passed
isUnsignedType<unsigned int> == 1 test passed
isUnsignedType<unsigned long> == 1 test passed
isUnsignedType<unsigned short> == 1 test passed
isUnsignedType<unsigned char> == 1 test passed
isUnsignedType<unsigned long long> == 1 test passed
isUnsignedType<simpleStruct> == 0 test passed
isUnsignedType<simpleStruct *> == 0 test passed
isUnsignedType<simpleStruct const *> == 0 test passed
isUnsignedType<polymorphicStruct> == 0 test passed
isUnsignedType<e1> == 1 test passed
isUnsignedType<void (*)()> == 0 test passed
isUnsignedType<int const> == 0 test passed
isUnsignedType<int *> == 0 test passed
isUnsignedType<int [4]> == 0 test passed
isUnsignedType<void> == 0 test passed
isEnumType<int> == 0 test passed
isEnumType<long> == 0 test passed
isEnumType<short> == 0 test passed
isEnumType<char> == 0 test passed
isEnumType<long long> == 0 test passed
isEnumType<unsigned int> == 0 test passed
isEnumType<unsigned long> == 0 test passed
isEnumType<unsigned short> == 0 test passed
isEnumType<unsigned char> == 0 test passed
isEnumType<unsigned long long> == 0 test passed
isEnumType<simpleStruct> == 0 test passed
isEnumType<simpleStruct *> == 0 test passed
isEnumType<simpleStruct const *> == 0 test passed
isEnumType<polymorphicStruct> == 0 test passed
isEnumType<e1> == 1 test passed
isEnumType<void (*)()> == 0 test passed
isEnumType<int const> == 0 test passed
isEnumType<int *> == 0 test passed
isEnumType<int [4]> == 0 test passed
isEnumType<void> == 0 test passed
isArithmeticType<int> == 1 test passed
isArithmeticType<long> == 1 test passed
isArithmeticType<short> == 1 test passed
isArithmeticType<char> == 1 test passed
isArithmeticType<long long> == 1 test passed
isArithmeticType<unsigned int> == 1 test passed
isArithmeticType<unsigned long> == 1 test passed
isArithmeticType<unsigned short> == 1 test passed
isArithmeticType<unsigned char> == 1 test passed
isArithmeticType<unsigned long long> == 1 test passed
isArithmeticType<simpleStruct> == 0 test passed
isArithmeticType<simpleStruct *> == 0 test passed
isArithmeticType<simpleStruct const *> == 0 test passed
isArithmeticType<polymorphicStruct> == 0 test passed
isArithmeticType<e1> == 0 test passed
isArithmeticType<void (*)()> == 0 test passed
isArithmeticType<int const> == 1 test passed
isArithmeticType<int *> == 0 test passed
isArithmeticType<int [4]> == 0 test passed
isArithmeticType<void> == 0 test passed
isArithmeticType<float> == 1 test passed
isArithmeticType<double> == 1 test passed
isIntegralType<int> == 1 test passed
isIntegralType<long> == 1 test passed
isIntegralType<short> == 1 test passed
isIntegralType<char> == 1 test passed
isIntegralType<long long> == 1 test passed
isIntegralType<unsigned int> == 1 test passed
isIntegralType<unsigned long> == 1 test passed
isIntegralType<unsigned short> == 1 test passed
isIntegralType<unsigned char> == 1 test passed
isIntegralType<unsigned long long> == 1 test passed
isIntegralType<simpleStruct> == 0 test passed
isIntegralType<simpleStruct *> == 0 test passed
isIntegralType<simpleStruct const *> == 0 test passed
isIntegralType<polymorphicStruct> == 0 test passed
isIntegralType<e1> == 0 test passed
isIntegralType<void (*)()> == 0 test passed
isIntegralType<int const> == 1 test passed
isIntegralType<int *> == 0 test passed
isIntegralType<int [4]> == 0 test passed
isIntegralType<void> == 0 test passed
isIntegralType<float> == 0 test passed
isIntegralType<double> == 0 test passed
isTemplate<int>                    : 0
isTemplate<vector<int>>            : 1
isTemplate<const vector<const int>>: 1
