@@ -55,40 +55,28 @@ struct va_args<ReturnType> {
5555#define BOOST_OPENMETHOD_GUIDE (NAME ) \
5656 BOOST_PP_CAT (BOOST_OPENMETHOD_ID(NAME), _guide)
5757
58+ #define BOOST_OPENMETHOD_TYPE (NAME, ARGS, ...) \
59+ ::boost::openmethod::method< \
60+ BOOST_OPENMETHOD_ID (NAME), \
61+ ::boost::openmethod::detail::va_args<__VA_ARGS__>::return_type ARGS, \
62+ ::boost::openmethod::detail::va_args<__VA_ARGS__>::registry>
63+
5864#define BOOST_OPENMETHOD (NAME, ARGS, ...) \
5965 struct BOOST_OPENMETHOD_ID (NAME); \
6066 template <typename ... ForwarderParameters> \
6167 typename ::boost::openmethod::detail::enable_forwarder< \
62- void , \
63- ::boost::openmethod::method< \
64- BOOST_OPENMETHOD_ID (NAME), \
65- ::boost::openmethod::detail::va_args<__VA_ARGS__>::return_type \
66- ARGS, \
67- ::boost::openmethod::detail::va_args<__VA_ARGS__>::registry>, \
68- typename ::boost::openmethod::method< \
69- BOOST_OPENMETHOD_ID(NAME), \
70- ::boost::openmethod::detail::va_args<__VA_ARGS__>::return_type \
71- ARGS, \
72- ::boost::openmethod::detail::va_args<__VA_ARGS__>::registry>, \
68+ void , BOOST_OPENMETHOD_TYPE(NAME, ARGS, __VA_ARGS__), \
69+ typename BOOST_OPENMETHOD_TYPE (NAME, ARGS, __VA_ARGS__), \
7370 ForwarderParameters...>::type \
7471 BOOST_OPENMETHOD_GUIDE(NAME)(ForwarderParameters && ... args); \
7572 template <typename ... ForwarderParameters> \
76- inline auto NAME (ForwarderParameters&&... args) -> \
77- typename ::boost::openmethod::detail::enable_forwarder< \
78- void, \
79- ::boost::openmethod::method< \
80- BOOST_OPENMETHOD_ID(NAME), \
81- ::boost::openmethod::detail::va_args<__VA_ARGS__>::return_type \
82- ARGS, \
83- ::boost::openmethod::detail::va_args<__VA_ARGS__>::registry>, \
73+ inline auto NAME (ForwarderParameters&&... args) \
74+ ->typename ::boost::openmethod::detail::enable_forwarder< \
75+ void, BOOST_OPENMETHOD_TYPE(NAME, ARGS, __VA_ARGS__), \
8476 ::boost::openmethod::detail::va_args<__VA_ARGS__>::return_type, \
8577 ForwarderParameters...>::type { \
86- return ::boost::openmethod::method< \
87- BOOST_OPENMETHOD_ID (NAME), \
88- ::boost::openmethod::detail::va_args<__VA_ARGS__>::return_type \
89- ARGS, \
90- ::boost::openmethod::detail::va_args<__VA_ARGS__>::registry>:: \
91- fn (std::forward<ForwarderParameters>(args)...); \
78+ return BOOST_OPENMETHOD_TYPE (NAME, ARGS, __VA_ARGS__)::fn ( \
79+ std::forward<ForwarderParameters>(args)...); \
9280 }
9381
9482#define BOOST_OPENMETHOD_DETAIL_LOCATE_METHOD (NAME, ARGS ) \
@@ -106,19 +94,21 @@ struct va_args<ReturnType> {
10694 template <> \
10795 struct BOOST_OPENMETHOD_OVERRIDERS (NAME)<__VA_ARGS__ ARGS> { \
10896 BOOST_OPENMETHOD_DETAIL_LOCATE_METHOD (NAME, ARGS); \
109- static auto fn ARGS-> __VA_ARGS__ ; \
97+ static auto fn ARGS -> __VA_ARGS__; \
11098 static auto has_next () -> bool ; \
11199 template <typename ... Args> \
112100 static auto next (Args&&... args) -> decltype (auto ); \
113101 }; \
114102 inline auto BOOST_OPENMETHOD_OVERRIDERS ( \
115- NAME)<__VA_ARGS__ ARGS>::has_next() -> bool { \
103+ NAME)<__VA_ARGS__ ARGS>::has_next() \
104+ ->bool { \
116105 return boost_openmethod_detail_locate_method_aux< \
117106 void ARGS>::type::has_next<fn>(); \
118107 } \
119108 template <typename ... Args> \
120109 inline auto BOOST_OPENMETHOD_OVERRIDERS (NAME)<__VA_ARGS__ ARGS>::next( \
121- Args&&... args) -> decltype(auto ) { \
110+ Args&&... args) \
111+ ->decltype(auto ) { \
122112 BOOST_ASSERT (has_next ()); \
123113 return boost_openmethod_detail_locate_method_aux< \
124114 void ARGS>::type::next<fn>(std::forward<Args>(args)...); \
@@ -134,7 +124,7 @@ struct va_args<ReturnType> {
134124#define BOOST_OPENMETHOD_DEFINE_OVERRIDER (NAME, ARGS, ...) \
135125 BOOST_OPENMETHOD_DETAIL_REGISTER_OVERRIDER (NAME, ARGS, __VA_ARGS__) \
136126 auto BOOST_OPENMETHOD_OVERRIDER(NAME, ARGS, __VA_ARGS__)::fn ARGS \
137- -> boost::mp11::mp_back<boost::mp11::mp_list<__VA_ARGS__>>
127+ ->boost::mp11::mp_back<boost::mp11::mp_list<__VA_ARGS__>>
138128
139129#define BOOST_OPENMETHOD_OVERRIDE (NAME, ARGS, ...) \
140130 BOOST_OPENMETHOD_DECLARE_OVERRIDER (NAME, ARGS, __VA_ARGS__) \
@@ -144,7 +134,7 @@ struct va_args<ReturnType> {
144134 BOOST_OPENMETHOD_DECLARE_OVERRIDER (NAME, ARGS, __VA_ARGS__) \
145135 BOOST_OPENMETHOD_DETAIL_REGISTER_OVERRIDER(NAME, ARGS, __VA_ARGS__) \
146136 inline auto BOOST_OPENMETHOD_OVERRIDER(NAME, ARGS, __VA_ARGS__)::fn ARGS \
147- -> boost::mp11::mp_back<boost::mp11::mp_list<__VA_ARGS__>>
137+ ->boost::mp11::mp_back<boost::mp11::mp_list<__VA_ARGS__>>
148138
149139#define BOOST_OPENMETHOD_CLASSES (...) \
150140 BOOST_OPENMETHOD_REGISTER (::boost::openmethod::use_classes<__VA_ARGS__>);
0 commit comments