@@ -45,6 +45,8 @@ namespace detail {
4545template <class Registry , class Class >
4646constexpr bool is_polymorphic = Registry::rtti::template is_polymorphic<Class>;
4747
48+ using macro_default_registry = BOOST_OPENMETHOD_DEFAULT_REGISTRY;
49+
4850template <typename ...>
4951struct extract_registry ;
5052
@@ -962,10 +964,11 @@ class method;
962964
963965template <
964966 typename Name, typename ... Parameters, typename ReturnType, class Registry >
965- class method <Name(Parameters...), ReturnType, Registry>
967+ class method <Name, auto (Parameters...)-> ReturnType, Registry>
966968 : public detail::method_info {
967969 // Aliases used in implementation only. Everything extracted from template
968970 // arguments is capitalized like the arguments themselves.
971+ using RegistryType = Registry;
969972 using rtti = typename Registry::rtti;
970973 using DeclaredParameters = mp11::mp_list<Parameters...>;
971974 using CallParameters =
@@ -1107,21 +1110,22 @@ class method<Name(Parameters...), ReturnType, Registry>
11071110
11081111template <
11091112 typename Name, typename ... Parameters, typename ReturnType, class Registry >
1110- method<Name(Parameters...), ReturnType, Registry>
1111- method<Name(Parameters...), ReturnType, Registry>::fn;
1113+ method<Name, auto (Parameters...)-> ReturnType, Registry>
1114+ method<Name, auto (Parameters...)-> ReturnType, Registry>::fn;
11121115
11131116template <
11141117 typename Name, typename ... Parameters, typename ReturnType, class Registry >
11151118template <auto >
1116- typename method<Name(Parameters...), ReturnType, Registry>::FunctionPointer
1117- method<Name(Parameters...), ReturnType, Registry>::next;
1119+ typename method<
1120+ Name, auto (Parameters...)->ReturnType, Registry>::FunctionPointer
1121+ method<Name, auto (Parameters...)->ReturnType, Registry>::next;
11181122
11191123template <typename T>
11201124constexpr bool is_method = std::is_base_of_v<detail::method_info, T>;
11211125
11221126template <
11231127 typename Name, typename ... Parameters, typename ReturnType, class Registry >
1124- method<Name(Parameters...), ReturnType, Registry>::method() {
1128+ method<Name, auto (Parameters...)-> ReturnType, Registry>::method() {
11251129 method_info::slots_strides_ptr = slots_strides;
11261130
11271131 using virtual_type_ids = detail::type_id_list<
@@ -1140,20 +1144,21 @@ method<Name(Parameters...), ReturnType, Registry>::method() {
11401144
11411145template <
11421146 typename Name, typename ... Parameters, typename ReturnType, class Registry >
1143- std::size_t method<
1144- Name (Parameters...), ReturnType, Registry>:: slots_strides[2 * Arity - 1 ];
1147+ std::size_t method<Name, auto (Parameters...)->ReturnType, Registry>::
1148+ slots_strides[2 * Arity - 1 ];
11451149
11461150template <
11471151 typename Name, typename ... Parameters, typename ReturnType, class Registry >
1148- method<Name(Parameters...), ReturnType, Registry>::~method () {
1152+ method<Name, auto (Parameters...)-> ReturnType, Registry>::~method () {
11491153 Registry::methods.remove (*this );
11501154}
11511155
11521156template <
11531157 typename Name, typename ... Parameters, typename ReturnType, class Registry >
11541158template <class Error >
1155- auto method<Name(Parameters...), ReturnType, Registry>::check_static_offset(
1156- std::size_t actual, std::size_t expected) const -> void {
1159+ auto method<Name, auto (Parameters...)->ReturnType, Registry>::
1160+ check_static_offset (std::size_t actual, std::size_t expected) const
1161+ -> void {
11571162 using namespace detail ;
11581163 using error_handler =
11591164 typename Registry::template policy<policies::error_handler>;
@@ -1177,7 +1182,7 @@ auto method<Name(Parameters...), ReturnType, Registry>::check_static_offset(
11771182template <
11781183 typename Name, typename ... Parameters, typename ReturnType, class Registry >
11791184BOOST_FORCEINLINE auto
1180- method<Name(Parameters...), ReturnType, Registry>::operator ()(
1185+ method<Name, auto (Parameters...)-> ReturnType, Registry>::operator ()(
11811186 detail::remove_virtual<Parameters>... args) const -> ReturnType {
11821187 using namespace detail ;
11831188 auto pf = resolve (parameter_traits<Parameters, Registry>::peek (args)...);
@@ -1188,10 +1193,10 @@ method<Name(Parameters...), ReturnType, Registry>::operator()(
11881193template <
11891194 typename Name, typename ... Parameters, typename ReturnType, class Registry >
11901195template <typename ... ArgType>
1191- BOOST_FORCEINLINE
1192- typename method< Name(Parameters...), ReturnType, Registry>::FunctionPointer
1193- method<Name(Parameters...), ReturnType, Registry>::resolve(
1194- const ArgType&... args) const {
1196+ BOOST_FORCEINLINE typename method<
1197+ Name, auto (Parameters...)-> ReturnType, Registry>::FunctionPointer
1198+ method<Name, auto (Parameters...)-> ReturnType, Registry>::resolve(
1199+ const ArgType&... args) const {
11951200 using namespace detail ;
11961201
11971202 std::uintptr_t pf;
@@ -1209,7 +1214,8 @@ BOOST_FORCEINLINE
12091214template <
12101215 typename Name, typename ... Parameters, typename ReturnType, class Registry >
12111216template <typename ArgType>
1212- BOOST_FORCEINLINE auto method<Name(Parameters...), ReturnType, Registry>::vptr(
1217+ BOOST_FORCEINLINE auto
1218+ method<Name, auto (Parameters...)->ReturnType, Registry>::vptr(
12131219 const ArgType& arg) const -> vptr_type {
12141220 if constexpr (detail::is_virtual_ptr<ArgType>) {
12151221 return arg.vptr ();
@@ -1222,7 +1228,7 @@ template<
12221228 typename Name, typename ... Parameters, typename ReturnType, class Registry >
12231229template <typename MethodArgList, typename ArgType, typename ... MoreArgTypes>
12241230BOOST_FORCEINLINE auto
1225- method<Name(Parameters...), ReturnType, Registry>::resolve_uni(
1231+ method<Name, auto (Parameters...)-> ReturnType, Registry>::resolve_uni(
12261232 const ArgType& arg, const MoreArgTypes&... more_args) const
12271233 -> std::uintptr_t {
12281234
@@ -1251,7 +1257,7 @@ template<
12511257 typename Name, typename ... Parameters, typename ReturnType, class Registry >
12521258template <typename MethodArgList, typename ArgType, typename ... MoreArgTypes>
12531259BOOST_FORCEINLINE auto
1254- method<Name(Parameters...), ReturnType, Registry>::resolve_multi_first(
1260+ method<Name, auto (Parameters...)-> ReturnType, Registry>::resolve_multi_first(
12551261 const ArgType& arg, const MoreArgTypes&... more_args) const
12561262 -> std::uintptr_t {
12571263
@@ -1292,7 +1298,7 @@ template<
12921298 std::size_t VirtualArg, typename MethodArgList, typename ArgType,
12931299 typename ... MoreArgTypes>
12941300BOOST_FORCEINLINE auto
1295- method<Name(Parameters...), ReturnType, Registry>::resolve_multi_next(
1301+ method<Name, auto (Parameters...)-> ReturnType, Registry>::resolve_multi_next(
12961302 vptr_type dispatch, const ArgType& arg,
12971303 const MoreArgTypes&... more_args) const -> std::uintptr_t {
12981304
@@ -1348,9 +1354,9 @@ auto error_type_id(const Class& obj) {
13481354
13491355template <
13501356 typename Name, typename ... Parameters, typename ReturnType, class Registry >
1351- BOOST_NORETURN auto
1352- method<Name( Parameters...), ReturnType, Registry>::not_implemented_handler(
1353- detail::remove_virtual<Parameters>... args) -> ReturnType {
1357+ BOOST_NORETURN auto method<Name, auto (Parameters...)->ReturnType, Registry>::
1358+ not_implemented_handler (detail::remove_virtual< Parameters> ... args)
1359+ -> ReturnType {
13541360 if constexpr (Registry::template has_policy<policies::error_handler>) {
13551361 not_implemented_error error;
13561362 error.method = Registry::rtti::template static_type<method>();
@@ -1383,7 +1389,7 @@ template<
13831389 typename Name, typename ... Parameters, typename ReturnType, class Registry >
13841390template <
13851391 auto Overrider, typename OverriderReturn, typename ... OverriderParameters>
1386- auto method<Name(Parameters...), ReturnType, Registry>::
1392+ auto method<Name, auto (Parameters...)-> ReturnType, Registry>::
13871393 thunk<Overrider, OverriderReturn (*)(OverriderParameters...)>::fn(
13881394 detail::remove_virtual<Parameters>... arg) -> ReturnType {
13891395 using namespace detail ;
@@ -1403,7 +1409,7 @@ auto method<Name(Parameters...), ReturnType, Registry>::
14031409template <
14041410 typename Name, typename ... Parameters, typename ReturnType, class Registry >
14051411template <auto Function, typename FnReturnType>
1406- method<Name(Parameters...), ReturnType, Registry>::override_impl<
1412+ method<Name, auto (Parameters...)-> ReturnType, Registry>::override_impl<
14071413 Function, FnReturnType>::override_impl(FunctionPointer* p_next) {
14081414 using namespace detail ;
14091415
0 commit comments