1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm> 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <vector> 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <string> 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "cppunit/cppunit_proxy.h" 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_NAMESPACES) 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std; 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass TypeTraitsTest : public CPPUNIT_NS::TestCase 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE(TypeTraitsTest); 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_IGNORE; 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(manips); 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(integer); 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(rational); 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(pointer_type); 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_IGNORE; 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(reference_type); 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_STOP_IGNORE; 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(both_pointer_type); 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(ok_to_use_memcpy); 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(ok_to_use_memmove); 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(trivial_destructor); 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(is_POD); 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(stlport_class); 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE_END(); 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprotected: 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void manips(); 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void integer(); 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void rational(); 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void pointer_type(); 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void reference_type(); 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void both_pointer_type(); 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void ok_to_use_memcpy(); 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void ok_to_use_memmove(); 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void trivial_destructor(); 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void is_POD(); 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void stlport_class(); 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(TypeTraitsTest); 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (__GNUC__) && defined (_STLP_USE_NAMESPACES) 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// libstdc++ sometimes exposed its own __true_type type in global 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// namespace resulting in an ambiguity. 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define __true_type std::__true_type 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define __false_type std::__false_type 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint type_to_value(__true_type) 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return 1; } 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint type_to_value(__false_type) 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return 0; } 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint* int_pointer; 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint const* int_const_pointer; 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint volatile* int_volatile_pointer; 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint const volatile* int_const_volatile_pointer; 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint int_val = 0; 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint const int_const_val = 0; 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint volatile int_volatile_val = 0; 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint & int_ref = int_val; 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint const& int_const_ref = int_val; 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint const volatile& int_const_volatile_ref = int_val; 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//A type that represent any type: 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct any_type 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Dummy operations to forbid to compilers with intrinsic 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //type traits support to consider this type as a POD. 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott any_type() : m_data(1) {} 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott any_type(const any_type&) : m_data(2) {} 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott any_type& operator = (const any_type&) 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { m_data = 3; return *this; } 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ~any_type() { m_data = 0; } 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t m_data; 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottany_type any; 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottany_type* any_pointer; 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottany_type const* any_const_pointer; 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottany_type volatile* any_volatile_pointer; 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottany_type const volatile* any_const_volatile_pointer; 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//A type that represent any pod type 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct any_pod_type 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{}; 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_USE_BOOST_SUPPORT) 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//Mandatory for compilers without without partial template specialization. 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottBOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(any_pod_type) 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottany_pod_type any_pod; 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottany_pod_type* any_pod_pointer; 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottany_pod_type const* any_pod_const_pointer; 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottany_pod_type volatile* any_pod_volatile_pointer; 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottany_pod_type const volatile* any_pod_const_volatile_pointer; 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_USE_NAMESPACES) 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottnamespace std { 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct __type_traits<any_pod_type> { 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type has_trivial_default_constructor; 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type has_trivial_copy_constructor; 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type has_trivial_assignment_operator; 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type has_trivial_destructor; 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type is_POD_type; 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_USE_NAMESPACES) 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct base 131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{}; 132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct derived : public base 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{}; 134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation 137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <typename _Src, typename _Dst> 139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint is_convertible(_Src, _Dst) { 140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined(__BORLANDC__) 141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename _IsConvertible<_Src, _Dst>::_Ret _Ret; 142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott enum { _Is = _IsConvertible<_Src, _Dst>::value }; 144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __bool2type<_Is>::_Ret _Ret; 145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_value(_Ret()); 147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <typename _Src, typename _Dst> 150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint is_cv_convertible(_Src, _Dst) { 151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined(__BORLANDC__) 152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename _IsCVConvertible<_Src, _Dst>::_Ret _Ret; 153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott enum { _Is = _IsCVConvertible<_Src, _Dst>::value }; 155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __bool2type<_Is>::_Ret _Ret; 156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_value(_Ret()); 158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TypeTraitsTest::manips() 162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __bool2type<0>::_Ret _ZeroRet; 166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_ZeroRet()) == 0 ); 167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __bool2type<1>::_Ret _OneRet; 168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_OneRet()) == 1 ); 169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __bool2type<65456873>::_Ret _AnyRet; 170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_AnyRet()) == 1 ); 171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( __type2bool<__true_type>::_Ret == 1 ); 175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( __type2bool<__false_type>::_Ret == 0 ); 176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( __type2bool<any_type>::_Ret == 1 ); 177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Not<__true_type>::_Ret _NotTrueRet; 181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_NotTrueRet()) == 0 ); 182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Not<__false_type>::_Ret _NotFalseRet; 183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_NotFalseRet()) == 1 ); 184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Land2<__true_type, __true_type>::_Ret _TrueTrueRet; 188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_TrueTrueRet()) == 1 ); 189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Land2<__true_type, __false_type>::_Ret _TrueFalseRet; 190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_TrueFalseRet()) == 0 ); 191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Land2<__false_type, __true_type>::_Ret _FalseTrueRet; 192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_FalseTrueRet()) == 0 ); 193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Land2<__false_type, __false_type>::_Ret _FalseFalseRet; 194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_FalseFalseRet()) == 0 ); 195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Land3<__true_type, __true_type, __true_type>::_Ret _TrueTrueTrueRet; 199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_TrueTrueTrueRet()) == 1 ); 200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Land3<__true_type, __true_type, __false_type>::_Ret _TrueTrueFalseRet; 201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_TrueTrueFalseRet()) == 0 ); 202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Land3<__true_type, __false_type, __true_type>::_Ret _TrueFalseTrueRet; 203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_TrueFalseTrueRet()) == 0 ); 204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Land3<__true_type, __false_type, __false_type>::_Ret _TrueFalseFalseRet; 205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_TrueFalseFalseRet()) == 0 ); 206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Land3<__false_type, __true_type, __true_type>::_Ret _FalseTrueTrueRet; 207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_FalseTrueTrueRet()) == 0 ); 208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Land3<__false_type, __true_type, __false_type>::_Ret _FalseTrueFalseRet; 209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_FalseTrueFalseRet()) == 0 ); 210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Land3<__false_type, __false_type, __true_type>::_Ret _FalseFalseTrueRet; 211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_FalseFalseTrueRet()) == 0 ); 212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Land3<__false_type, __false_type, __false_type>::_Ret _FalseFalseFalseRet; 213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_FalseFalseFalseRet()) == 0 ); 214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Lor2<__true_type, __true_type>::_Ret _TrueTrueRet; 218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_TrueTrueRet()) == 1 ); 219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Lor2<__true_type, __false_type>::_Ret _TrueFalseRet; 220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_TrueFalseRet()) == 1 ); 221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Lor2<__false_type, __true_type>::_Ret _FalseTrueRet; 222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_FalseTrueRet()) == 1 ); 223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Lor2<__false_type, __false_type>::_Ret _FalseFalseRet; 224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_FalseFalseRet()) == 0 ); 225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Lor3<__true_type, __true_type, __true_type>::_Ret _TrueTrueTrueRet; 229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_TrueTrueTrueRet()) == 1 ); 230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Lor3<__true_type, __true_type, __false_type>::_Ret _TrueTrueFalseRet; 231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_TrueTrueFalseRet()) == 1 ); 232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Lor3<__true_type, __false_type, __true_type>::_Ret _TrueFalseTrueRet; 233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_TrueFalseTrueRet()) == 1 ); 234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Lor3<__true_type, __false_type, __false_type>::_Ret _TrueFalseFalseRet; 235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_TrueFalseFalseRet()) == 1 ); 236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Lor3<__false_type, __true_type, __true_type>::_Ret _FalseTrueTrueRet; 237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_FalseTrueTrueRet()) == 1 ); 238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Lor3<__false_type, __true_type, __false_type>::_Ret _FalseTrueFalseRet; 239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_FalseTrueFalseRet()) == 1 ); 240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Lor3<__false_type, __false_type, __true_type>::_Ret _FalseFalseTrueRet; 241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_FalseFalseTrueRet()) == 1 ); 242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Lor3<__false_type, __false_type, __false_type>::_Ret _FalseFalseFalseRet; 243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_FalseFalseFalseRet()) == 0 ); 244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __select<1, __true_type, __false_type>::_Ret _SelectFirstRet; 248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_SelectFirstRet()) == 1 ); 249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __select<0, __true_type, __false_type>::_Ret _SelectSecondRet; 250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_SelectSecondRet()) == 0 ); 251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (__BORLANDC__) 252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __selectT<__true_type, __true_type, __false_type>::_Ret _SelectFirstRet; 253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_SelectFirstRet()) == 1 ); 254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __selectT<__false_type, __true_type, __false_type>::_Ret _SelectSecondRet; 255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_SelectSecondRet()) == 0 ); 256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott base b; 261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott derived d; 262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const derived cd = d; 263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott base *pb = &b; 264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott derived *pd = &d; 265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott derived const *pcd = pd; 266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_convertible(any, b) == 0 ); 267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_convertible(d, b) == 1 ); 268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_convertible(cd, b) == 1 ); 269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // _IsCVConvertible only needs to work for pointer type: 270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //CPPUNIT_CHECK( is_cv_convertible(d, b) == 1 ); 271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //CPPUNIT_CHECK( is_cv_convertible(cd, b) == 0 ); 272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //_IsConvertible do not need to work for pointers: 274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //CPPUNIT_CHECK( is_convertible(pd, pb) == 1 ); 275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //CPPUNIT_CHECK( is_convertible(pcd, pb) == 1 ); 276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_cv_convertible(pd, pb) == 1 ); 278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_cv_convertible(pcd, pb) == 0 ); 279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <typename _Type> 285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint is_integer(_Type) { 286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename _IsIntegral<_Type>::_Ret _Ret; 287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_value(_Ret()); 288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TypeTraitsTest::integer() 292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(bool()) == 1 ); 295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(char()) == 1 ); 296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef signed char signed_char; 297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(signed_char()) == 1 ); 298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef unsigned char unsigned_char; 299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(unsigned_char()) == 1 ); 300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_HAS_WCHAR_T) 301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(wchar_t()) == 1 ); 302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(short()) == 1 ); 304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef unsigned short unsigned_short; 305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(unsigned_short()) == 1 ); 306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(int()) == 1 ); 307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef unsigned int unsigned_int; 308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(unsigned_int()) == 1 ); 309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(long()) == 1 ); 310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef unsigned long unsigned_long; 311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(unsigned_long()) == 1 ); 312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_LONG_LONG) 313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _STLP_LONG_LONG long_long; 314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(long_long()) == 1 ); 315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef unsigned _STLP_LONG_LONG unsigned_long_long; 316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(unsigned_long_long()) == 1 ); 317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(float()) == 0 ); 319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(double()) == 0 ); 320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined ( _STLP_NO_LONG_DOUBLE ) 321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef long double long_double; 322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(long_double()) == 0 ); 323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(any) == 0 ); 325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_integer(any_pointer) == 0 ); 326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <typename _Type> 331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint is_rational(_Type) { 332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename _IsRational<_Type>::_Ret _Ret; 333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_value(_Ret()); 334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TypeTraitsTest::rational() 338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(bool()) == 0 ); 341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(char()) == 0 ); 342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef signed char signed_char; 343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(signed_char()) == 0 ); 344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef unsigned char unsigned_char; 345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(unsigned_char()) == 0 ); 346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_HAS_WCHAR_T) 347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(wchar_t()) == 0 ); 348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(short()) == 0 ); 350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef unsigned short unsigned_short; 351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(unsigned_short()) == 0 ); 352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(int()) == 0 ); 353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef unsigned int unsigned_int; 354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(unsigned_int()) == 0 ); 355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(long()) == 0 ); 356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef unsigned long unsigned_long; 357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(unsigned_long()) == 0 ); 358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_LONG_LONG) 359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _STLP_LONG_LONG long_long; 360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(long_long()) == 0 ); 361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef unsigned _STLP_LONG_LONG unsigned_long_long; 362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(unsigned_long_long()) == 0 ); 363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(float()) == 1 ); 365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(double()) == 1 ); 366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined ( _STLP_NO_LONG_DOUBLE ) 367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef long double long_double; 368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(long_double()) == 1 ); 369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(any) == 0 ); 371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_rational(any_pointer) == 0 ); 372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <typename _Type> 377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint is_pointer_type(_Type) { 378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_value(_IsPtrType<_Type>::_Ret()); 379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TypeTraitsTest::pointer_type() 383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_pointer_type(int_val) == 0 ); 386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_pointer_type(int_pointer) == 1 ); 387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_pointer_type(int_const_pointer) == 1 ); 388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_pointer_type(int_volatile_pointer) == 1 ); 389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_pointer_type(int_const_volatile_pointer) == 1 ); 390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_pointer_type(int_ref) == 0 ); 391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_pointer_type(int_const_ref) == 0 ); 392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_pointer_type(any) == 0 ); 393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_pointer_type(any_pointer) == 1 ); 394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TypeTraitsTest::reference_type() 398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_IsRefType<int>::_Ret()) == 0 ); 401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_IsRefType<int*>::_Ret()) == 0 ); 402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_IsRefType<int&>::_Ret()) == 1 ); 403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_IsRefType<int const&>::_Ret()) == 1 ); 404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_IsRefType<int const volatile&>::_Ret()) == 1 ); 405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_IsOKToSwap(int_pointer, int_pointer, __true_type(), __true_type())._Answer()) == 1 ); 407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( type_to_value(_IsOKToSwap(int_pointer, int_pointer, __false_type(), __false_type())._Answer()) == 0 ); 408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <typename _Tp1, typename _Tp2> 413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint are_both_pointer_type (_Tp1, _Tp2) { 414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_value(_BothPtrType<_Tp1, _Tp2>::_Answer()); 415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TypeTraitsTest::both_pointer_type() 419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( are_both_pointer_type(int_val, int_val) == 0 ); 422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( are_both_pointer_type(int_pointer, int_pointer) == 1 ); 423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( are_both_pointer_type(int_const_pointer, int_const_pointer) == 1 ); 424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( are_both_pointer_type(int_volatile_pointer, int_volatile_pointer) == 1 ); 425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( are_both_pointer_type(int_const_volatile_pointer, int_const_volatile_pointer) == 1 ); 426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( are_both_pointer_type(int_ref, int_ref) == 0 ); 427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( are_both_pointer_type(int_const_ref, int_const_ref) == 0 ); 428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( are_both_pointer_type(any, any) == 0 ); 429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( are_both_pointer_type(any_pointer, any_pointer) == 1 ); 430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <typename _Tp1, typename _Tp2> 435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint is_ok_to_use_memcpy(_Tp1 val1, _Tp2 val2) { 436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_value(_UseTrivialCopy(val1, val2)._Answer()); 437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TypeTraitsTest::ok_to_use_memcpy() 441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) 443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(int_pointer, int_pointer) == 1 ); 444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_pointer, int_pointer) == 1 ); 445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(int_pointer, int_volatile_pointer) == 0 ); 446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(int_pointer, int_const_volatile_pointer) == 0 ); 447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_pointer, int_const_pointer) == 0 ); 448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_pointer, int_volatile_pointer) == 0 ); 449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_pointer, int_const_volatile_pointer) == 0 ); 450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_volatile_pointer, int_const_volatile_pointer) == 0 ); 451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(int_pointer, any_pointer) == 0 ); 452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pointer, int_pointer) == 0 ); 453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pointer, any_pointer) == 0 ); 454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pointer, any_const_pointer) == 0 ); 455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pod_pointer, int_pointer) == 0 ); 456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pod_pointer, any_pod_pointer) == 1 ); 457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pod_pointer, any_pod_const_pointer) == 0 ); 458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<float> **pvf = 0; 459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int> **pvi = 0; 460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(pvf, pvi) == 0 ); 461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memcpy(pvi, pvf) == 0 ); 462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <typename _Tp1, typename _Tp2> 467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint is_ok_to_use_memmove(_Tp1 val1, _Tp2 val2) { 468e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_value(_UseTrivialUCopy(val1, val2)._Answer()); 469e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 470e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TypeTraitsTest::ok_to_use_memmove() 473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) 475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(int_pointer, int_pointer) == 1 ); 476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_pointer, int_pointer) == 1 ); 477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(int_pointer, int_volatile_pointer) == 0 ); 478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(int_pointer, int_const_volatile_pointer) == 0 ); 479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_pointer, int_const_pointer) == 0 ); 480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_pointer, int_volatile_pointer) == 0 ); 481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_pointer, int_const_volatile_pointer) == 0 ); 482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_volatile_pointer, int_const_volatile_pointer) == 0 ); 483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(int_pointer, any_pointer) == 0 ); 484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(any_pointer, int_pointer) == 0 ); 485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(any_pointer, any_pointer) == 0 ); 486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(any_pointer, any_const_pointer) == 0 ); 487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(any_pod_pointer, int_pointer) == 0 ); 488e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(any_pod_pointer, any_pod_pointer) == 1 ); 489e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_ok_to_use_memmove(any_pod_pointer, any_pod_const_pointer) == 0 ); 490e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 491e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 492e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 493e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 494e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <typename _Tp> 495e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint has_trivial_destructor(_Tp) { 496e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __type_traits<_Tp>::has_trivial_destructor _TrivialDestructor; 497e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_value(_TrivialDestructor()); 498e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 499e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 500e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct DestructorMonitor 501e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 502e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ~DestructorMonitor() 503e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { ++nb_destructor_call; } 504e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 505e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static size_t nb_destructor_call; 506e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 507e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 508e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsize_t DestructorMonitor::nb_destructor_call = 0; 509e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 510e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_USE_NAMESPACES) 511e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottnamespace std { 512e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 513e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL 514e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct __type_traits<DestructorMonitor> { 515e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type has_trivial_default_constructor; 516e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type has_trivial_copy_constructor; 517e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type has_trivial_assignment_operator; 518e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type has_trivial_destructor; 519e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type is_POD_type; 520e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 521e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_USE_NAMESPACES) 522e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 523e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 524e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 525e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 526e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TypeTraitsTest::trivial_destructor() 527e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 528e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 529e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( has_trivial_destructor(int_pointer) == 1 ); 530e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( has_trivial_destructor(int_const_pointer) == 1 ); 531e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( has_trivial_destructor(int_volatile_pointer) == 1 ); 532e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( has_trivial_destructor(int_const_volatile_pointer) == 1 ); 533e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( has_trivial_destructor(any_pointer) == 1 ); 534e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( has_trivial_destructor(any) == 0 ); 535e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( has_trivial_destructor(any_pointer) == 1 ); 536e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( has_trivial_destructor(any_pod) == 1 ); 537e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( has_trivial_destructor(string()) == 0 ); 538e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 539e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Check of the meta information impact in a container implementation 540e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 541e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<DestructorMonitor> v(10); 542e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott DestructorMonitor::nb_destructor_call = 0; 543e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 544e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( DestructorMonitor::nb_destructor_call == 0 ); 545e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 546e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 547e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 548e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 549e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <typename _Tp> 550e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint is_POD_type(_Tp) { 551e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __type_traits<_Tp>::is_POD_type _IsPODType; 552e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_value(_IsPODType()); 553e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 554e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 555e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 556e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TypeTraitsTest::is_POD() 557e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 558e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 559e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_POD_type(int_pointer) == 1 ); 560e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_POD_type(int_const_pointer) == 1 ); 561e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_POD_type(int_volatile_pointer) == 1 ); 562e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_POD_type(int_const_volatile_pointer) == 1 ); 563e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_POD_type(any_pointer) == 1 ); 564e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_POD_type(any) == 0 ); 565e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_POD_type(any_pointer) == 1 ); 566e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_POD_type(any_pod) == 1 ); 567e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_POD_type(string()) == 0 ); 568e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 569e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 570e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 571e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 572e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <typename _Tp> 573e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint is_stlport_class(_Tp) { 574e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _IsSTLportClass<_Tp> _STLportClass; 575e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (__BORLANDC__) 576e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename _STLportClass::_Ret _Is; 577e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 578e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __bool2type<_STLportClass::_Is>::_Ret _Is; 579e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 580e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_value(_Is()); 581e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 582e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 583e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 584e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid TypeTraitsTest::stlport_class() 585e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 586e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 587e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_stlport_class(allocator<char>()) == 1 ); 588e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) 589e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_stlport_class(string()) == 1 ); 590e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 591e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( is_stlport_class(any) == 0 ); 592e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 593e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 594