Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "main.h"
00026
00027 void test_meta()
00028 {
00029 typedef float & FloatRef;
00030 typedef const float & ConstFloatRef;
00031
00032 VERIFY((internal::conditional<(3<4),internal::true_type, internal::false_type>::type::value));
00033 VERIFY(( internal::is_same<float,float>::value));
00034 VERIFY((!internal::is_same<float,double>::value));
00035 VERIFY((!internal::is_same<float,float&>::value));
00036 VERIFY((!internal::is_same<float,const float&>::value));
00037
00038 VERIFY(( internal::is_same<float,internal::remove_all<const float&>::type >::value));
00039 VERIFY(( internal::is_same<float,internal::remove_all<const float*>::type >::value));
00040 VERIFY(( internal::is_same<float,internal::remove_all<const float*&>::type >::value));
00041 VERIFY(( internal::is_same<float,internal::remove_all<float**>::type >::value));
00042 VERIFY(( internal::is_same<float,internal::remove_all<float**&>::type >::value));
00043 VERIFY(( internal::is_same<float,internal::remove_all<float* const *&>::type >::value));
00044 VERIFY(( internal::is_same<float,internal::remove_all<float* const>::type >::value));
00045
00046
00047 VERIFY(( internal::is_same< internal::add_const<float>::type, const float >::value));
00048 VERIFY(( internal::is_same< internal::add_const<float*>::type, float* const>::value));
00049 VERIFY(( internal::is_same< internal::add_const<float const*>::type, float const* const>::value));
00050 VERIFY(( internal::is_same< internal::add_const<float&>::type, float& >::value));
00051
00052
00053 VERIFY(( internal::is_same< internal::remove_const<float const* const>::type, float const* >::value));
00054 VERIFY(( internal::is_same< internal::remove_const<float const*>::type, float const* >::value));
00055 VERIFY(( internal::is_same< internal::remove_const<float* const>::type, float* >::value));
00056
00057
00058 VERIFY(( internal::is_same< internal::add_const_on_value_type<float&>::type, float const& >::value));
00059 VERIFY(( internal::is_same< internal::add_const_on_value_type<float*>::type, float const* >::value));
00060
00061 VERIFY(( internal::is_same< internal::add_const_on_value_type<float>::type, const float >::value));
00062 VERIFY(( internal::is_same< internal::add_const_on_value_type<const float>::type, const float >::value));
00063
00064 VERIFY(( internal::is_same< internal::add_const_on_value_type<const float* const>::type, const float* const>::value));
00065 VERIFY(( internal::is_same< internal::add_const_on_value_type<float* const>::type, const float* const>::value));
00066
00067 VERIFY(( internal::is_same<float,internal::remove_reference<float&>::type >::value));
00068 VERIFY(( internal::is_same<const float,internal::remove_reference<const float&>::type >::value));
00069 VERIFY(( internal::is_same<float,internal::remove_pointer<float*>::type >::value));
00070 VERIFY(( internal::is_same<const float,internal::remove_pointer<const float*>::type >::value));
00071 VERIFY(( internal::is_same<float,internal::remove_pointer<float* const >::type >::value));
00072
00073 VERIFY(internal::meta_sqrt<1>::ret == 1);
00074 #define VERIFY_META_SQRT(X) VERIFY(internal::meta_sqrt<X>::ret == int(internal::sqrt(double(X))))
00075 VERIFY_META_SQRT(2);
00076 VERIFY_META_SQRT(3);
00077 VERIFY_META_SQRT(4);
00078 VERIFY_META_SQRT(5);
00079 VERIFY_META_SQRT(6);
00080 VERIFY_META_SQRT(8);
00081 VERIFY_META_SQRT(9);
00082 VERIFY_META_SQRT(15);
00083 VERIFY_META_SQRT(16);
00084 VERIFY_META_SQRT(17);
00085 VERIFY_META_SQRT(255);
00086 VERIFY_META_SQRT(256);
00087 VERIFY_META_SQRT(257);
00088 VERIFY_META_SQRT(1023);
00089 VERIFY_META_SQRT(1024);
00090 VERIFY_META_SQRT(1025);
00091 }