#include "unique_id.hpp" #include #include #include template struct numeric_type; #define SET_NUMERIC_TYPE(z, n, data) \ SET_TYPE(numeric_type) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 0) SET_TYPE(int) SET_TYPE(char) SET_TYPE(bool) SET_TYPE(long) SET_TYPE_INDEX(int) SET_TYPE_INDEX(char) SET_TYPE_INDEX(bool) SET_TYPE_INDEX(long) #if 0 BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 256) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 512) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 768) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 0 + 1024) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 256 + 1024) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 512 + 1024) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 768 + 1024) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 0 + 2048) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 256 + 2048) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 512 + 2048) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 768 + 2048) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 0 + 3072) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 256 + 3072) BOOST_PP_REPEAT(256, SET_NUMERIC_TYPE, 512 + 3072) BOOST_PP_REPEAT(256 - 4, SET_NUMERIC_TYPE, 768 + 3072) #endif int main() { BOOST_STATIC_ASSERT(GET_INDEX_FROM_TYPE(numeric_type<0>) == 0); BOOST_STATIC_ASSERT(GET_INDEX_FROM_TYPE(numeric_type<61>) == 61); BOOST_STATIC_ASSERT(GET_INDEX_FROM_TYPE(numeric_type<62>) == 62); BOOST_STATIC_ASSERT(GET_INDEX_FROM_TYPE(numeric_type<63>) == 63); BOOST_STATIC_ASSERT(GET_INDEX_FROM_TYPE(numeric_type<64>) == 64); BOOST_STATIC_ASSERT(GET_INDEX_FROM_TYPE(int) == 256); BOOST_STATIC_ASSERT(GET_INDEX_FROM_TYPE(char) == 257); BOOST_STATIC_ASSERT(GET_INDEX_FROM_TYPE(bool) == 258); BOOST_STATIC_ASSERT(GET_INDEX_FROM_TYPE(long) == 259); BOOST_STATIC_ASSERT((boost::is_same, GET_TYPE_FROM_INDEX(0)>::value)); BOOST_STATIC_ASSERT((boost::is_same, GET_TYPE_FROM_INDEX(61)>::value)); BOOST_STATIC_ASSERT((boost::is_same, GET_TYPE_FROM_INDEX(62)>::value)); BOOST_STATIC_ASSERT((boost::is_same, GET_TYPE_FROM_INDEX(63)>::value)); BOOST_STATIC_ASSERT((boost::is_same, GET_TYPE_FROM_INDEX(64)>::value)); BOOST_STATIC_ASSERT((boost::is_same::value)); BOOST_STATIC_ASSERT((boost::is_same::value)); BOOST_STATIC_ASSERT((boost::is_same::value)); BOOST_STATIC_ASSERT((boost::is_same::value)); }