diff --git a/include/boost/openmethod/macros.hpp b/include/boost/openmethod/macros.hpp index 48cf765..c6c25b1 100644 --- a/include/boost/openmethod/macros.hpp +++ b/include/boost/openmethod/macros.hpp @@ -49,6 +49,9 @@ struct va_args { #define BOOST_OPENMETHOD_OVERRIDERS(NAME) \ BOOST_PP_CAT(BOOST_OPENMETHOD_ID(NAME), _overriders) +#define BOOST_OPENMETHOD_OVERRIDER(NAME, ARGS, ...) \ + BOOST_OPENMETHOD_OVERRIDERS(NAME)<__VA_ARGS__ ARGS> + #define BOOST_OPENMETHOD_GUIDE(NAME) \ BOOST_PP_CAT(BOOST_OPENMETHOD_ID(NAME), _guide) @@ -121,31 +124,28 @@ struct va_args { void ARGS>::type::next(std::forward(args)...); \ } -#define BOOST_OPENMETHOD_OVERRIDER(NAME, ARGS, ...) \ - BOOST_OPENMETHOD_OVERRIDERS(NAME)<__VA_ARGS__ ARGS> - -#define BOOST_OPENMETHOD_DEFINE_OVERRIDER(NAME, ARGS, ...) \ - auto BOOST_OPENMETHOD_OVERRIDER(NAME, ARGS, __VA_ARGS__)::fn ARGS \ - -> boost::mp11::mp_back> - -#define BOOST_OPENMETHOD_INLINE_OVERRIDE(NAME, ARGS, ...) \ - BOOST_OPENMETHOD_DECLARE_OVERRIDER(NAME, ARGS, __VA_ARGS__) \ - inline BOOST_OPENMETHOD_REGISTER( \ - BOOST_OPENMETHOD_OVERRIDERS(NAME) < __VA_ARGS__ ARGS > \ - ::boost_openmethod_detail_locate_method_aux::type:: \ - override< \ - BOOST_OPENMETHOD_OVERRIDERS(NAME) < __VA_ARGS__ ARGS>::fn >); \ - inline BOOST_OPENMETHOD_DEFINE_OVERRIDER(NAME, ARGS, __VA_ARGS__) - -#define BOOST_OPENMETHOD_OVERRIDE(NAME, ARGS, ...) \ - BOOST_OPENMETHOD_DECLARE_OVERRIDER(NAME, ARGS, __VA_ARGS__) \ +#define BOOST_OPENMETHOD_DETAIL_REGISTER_OVERRIDER(NAME, ARGS, ...) \ BOOST_OPENMETHOD_REGISTER( \ BOOST_OPENMETHOD_OVERRIDERS(NAME) < __VA_ARGS__ ARGS > \ ::boost_openmethod_detail_locate_method_aux::type:: \ override< \ - BOOST_OPENMETHOD_OVERRIDERS(NAME) < __VA_ARGS__ ARGS>::fn >); \ + BOOST_OPENMETHOD_OVERRIDERS(NAME) < __VA_ARGS__ ARGS>::fn >); + +#define BOOST_OPENMETHOD_DEFINE_OVERRIDER(NAME, ARGS, ...) \ + BOOST_OPENMETHOD_DETAIL_REGISTER_OVERRIDER(NAME, ARGS, __VA_ARGS__) \ + auto BOOST_OPENMETHOD_OVERRIDER(NAME, ARGS, __VA_ARGS__)::fn ARGS \ + -> boost::mp11::mp_back> + +#define BOOST_OPENMETHOD_OVERRIDE(NAME, ARGS, ...) \ + BOOST_OPENMETHOD_DECLARE_OVERRIDER(NAME, ARGS, __VA_ARGS__) \ BOOST_OPENMETHOD_DEFINE_OVERRIDER(NAME, ARGS, __VA_ARGS__) +#define BOOST_OPENMETHOD_INLINE_OVERRIDE(NAME, ARGS, ...) \ + BOOST_OPENMETHOD_DECLARE_OVERRIDER(NAME, ARGS, __VA_ARGS__) \ + BOOST_OPENMETHOD_DETAIL_REGISTER_OVERRIDER(NAME, ARGS, __VA_ARGS__) \ + inline auto BOOST_OPENMETHOD_OVERRIDER(NAME, ARGS, __VA_ARGS__)::fn ARGS \ + -> boost::mp11::mp_back> + #define BOOST_OPENMETHOD_CLASSES(...) \ BOOST_OPENMETHOD_REGISTER(::boost::openmethod::use_classes<__VA_ARGS__>);