diff --git a/include/boost/type_index/runtime_cast/register_runtime_class.hpp b/include/boost/type_index/runtime_cast/register_runtime_class.hpp index 569666a..49883a0 100644 --- a/include/boost/type_index/runtime_cast/register_runtime_class.hpp +++ b/include/boost/type_index/runtime_cast/register_runtime_class.hpp @@ -37,22 +37,12 @@ inline type_index runtime_class_construct_type_id(T const*) { #define BOOST_TYPE_INDEX_CHECK_BASE_(r, data, Base) \ if(void const* ret_val = this->Base::boost_type_index_find_instance_(idx)) return ret_val; -#define BOOST_TYPE_INDEX_CHECK_BASES(base_list) \ - BOOST_PP_SEQ_FOR_EACH(BOOST_TYPE_INDEX_CHECK_BASE_, _, base_list) - -#define BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS \ - virtual void const* boost_type_index_find_instance_(boost::typeindex::type_index const& idx) const BOOST_NOEXCEPT { \ - if(idx == boost::typeindex::detail::runtime_class_construct_type_id(this)) \ - return this; \ - return NULL; \ - } - -#define BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS_BASES(base_list) \ - virtual void const* boost_type_index_find_instance_(boost::typeindex::type_index const& idx) const BOOST_NOEXCEPT { \ - if(idx == boost::typeindex::detail::runtime_class_construct_type_id(this)) \ - return this; \ - BOOST_TYPE_INDEX_CHECK_BASES(base_list) \ - return NULL; \ +#define BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS(base_list) \ + virtual void const* boost_type_index_find_instance_(boost::typeindex::type_index const& idx) const BOOST_NOEXCEPT { \ + if(idx == boost::typeindex::detail::runtime_class_construct_type_id(this)) \ + return this; \ + BOOST_PP_SEQ_FOR_EACH(BOOST_TYPE_INDEX_CHECK_BASE_, _, base_list) \ + return NULL; \ } }} // namespace boost::typeindex diff --git a/test/type_index_runtime_cast_test.cpp b/test/type_index_runtime_cast_test.cpp index 4ceebf9..546affd 100644 --- a/test/type_index_runtime_cast_test.cpp +++ b/test/type_index_runtime_cast_test.cpp @@ -26,72 +26,72 @@ std::string name; struct base { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS(BOOST_PP_SEQ_NIL) IMPLEMENT_CLASS(base) }; struct single_derived : base { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS_BASES((base)) + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((base)) IMPLEMENT_CLASS(single_derived) }; struct base1 { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS(BOOST_PP_SEQ_NIL) IMPLEMENT_CLASS(base1) }; struct base2 { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS(BOOST_PP_SEQ_NIL) IMPLEMENT_CLASS(base2) }; struct multiple_derived : base1, base2 { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS_BASES((base1)(base2)) + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((base1)(base2)) IMPLEMENT_CLASS(multiple_derived) }; struct baseV1 : virtual base { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS_BASES((base)) + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((base)) IMPLEMENT_CLASS(baseV1) }; struct baseV2 : virtual base { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS_BASES((base)) + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((base)) IMPLEMENT_CLASS(baseV2) }; struct multiple_virtual_derived : baseV1, baseV2 { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS_BASES((baseV1)(baseV2)) + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((baseV1)(baseV2)) IMPLEMENT_CLASS(multiple_virtual_derived) }; struct unrelated { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS(BOOST_PP_SEQ_NIL) IMPLEMENT_CLASS(unrelated) }; struct unrelated_with_base : base { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS_BASES((base)) + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((base)) IMPLEMENT_CLASS(unrelated_with_base) }; struct unrelatedV1 : virtual base { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS_BASES((base)) + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((base)) IMPLEMENT_CLASS(unrelatedV1) }; struct level1_a : base { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS_BASES((base)) + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((base)) IMPLEMENT_CLASS(level1_a) }; struct level1_b : base { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS_BASES((base)) + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((base)) IMPLEMENT_CLASS(level1_b) }; struct level2 : level1_a, level1_b { - BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS_BASES((level1_a)(level1_b)) + BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((level1_a)(level1_b)) IMPLEMENT_CLASS(level2) };