@@ -48,41 +48,41 @@ namespace rtl::detail
4848 template <class return_t > requires (member_kind == member::None && std::is_same_v<return_t , rtl::Return>)
4949 inline constexpr function<Return(args_t ...)> HopFunction<member_kind, args_t...>::returnT() const
5050 {
51- function<Return (traits::normal_sign_t <args_t >...)> erasedFn ;
52- initHopper (erasedFn );
53- return erasedFn ;
51+ function<Return (traits::normal_sign_t <args_t >...)> fn ;
52+ initHopper (fn );
53+ return fn ;
5454 }
5555
5656
5757 template <member member_kind, class ...args_t >
5858 template <class return_t > requires (member_kind == member::Static && std::is_same_v<return_t , rtl::Return>)
5959 inline constexpr const static_method<Return(args_t ...)> HopFunction<member_kind, args_t...>::returnT() const
6060 {
61- static_method<Return (traits::normal_sign_t <args_t >...)> erasedFn ;
62- initHopper (erasedFn );
63- return erasedFn ;
61+ static_method<Return (traits::normal_sign_t <args_t >...)> mth ;
62+ initHopper (mth );
63+ return mth ;
6464 }
6565
66+
6667 template <member member_kind, class ...args_t >
6768 template <class return_t > requires (member_kind == member::Static && !std::is_same_v<return_t , rtl::Return>)
6869 inline constexpr const static_method<return_t(args_t ...)> HopFunction<member_kind, args_t...>::returnT() const
6970 {
70- static_method<return_t (args_t ...)> fn ;
71+ static_method<return_t (args_t ...)> mth ;
7172 if (!m_argsTfnMeta.is_empty ())
7273 {
7374 if (m_argsTfnMeta.get_member_kind () != member::Static) {
74- fn .set_init_error (error::InvalidNonStaticMethodCaller);
75+ mth .set_init_error (error::InvalidNonStaticMethodCaller);
7576 }
76- else if (m_argsTfnMeta.get_member_kind () == member::Static) {
77-
78- const auto retId = traits::uid<return_t >::value;
79- return m_argsTfnMeta.get_lambda ()
80- .template to_function <args_t ...>()
81- .template get_hopper <return_t >(retId)
82- .f_ptr ();
77+ else if (m_argsTfnMeta.get_member_kind () == member::Static &&
78+ traits::uid<return_t >::value == m_argsTfnMeta.get_return_id ())
79+ {
80+ using function_t = dispatch::function_ptr<return_t , args_t ...>;
81+ auto fptr = static_cast <const function_t &>(m_argsTfnMeta.get_functor ()).f_ptr ();
82+ return static_method<return_t (args_t ...)>(fptr);
8383 }
8484 }
85- return fn ;
85+ return mth ;
8686 }
8787
8888
@@ -93,15 +93,16 @@ namespace rtl::detail
9393 function<return_t (args_t ...)> fn;
9494 if (!m_argsTfnMeta.is_empty ())
9595 {
96- if (m_argsTfnMeta.get_member_kind () == member::Static) {
96+ if (m_argsTfnMeta.get_member_kind () == member::Static)
97+ {
9798 fn.set_init_error (error::InvalidStaticMethodCaller);
9899 }
99- else if (m_argsTfnMeta.get_member_kind () == member::None) {
100-
101- const auto retId = traits::uid< return_t >::value;
102- return m_argsTfnMeta. get_lambda ()
103- . template to_function < args_t ...>()
104- . template get_hopper <return_t >(retId );
100+ else if (m_argsTfnMeta.get_member_kind () == member::None &&
101+ traits::uid< return_t >::value == m_argsTfnMeta. get_return_id ())
102+ {
103+ using function_t = dispatch::function_ptr< return_t , args_t ...>;
104+ auto fptr = static_cast < const function_t &>(m_argsTfnMeta. get_functor ()). f_ptr ();
105+ return function <return_t ( args_t ...)>(fptr );
105106 }
106107 }
107108 return fn;
@@ -170,30 +171,30 @@ namespace rtl::detail
170171 // initializing pos '0' with empty 'type_meta'.
171172 std::vector<rtl::type_meta> overloadsFnMeta = { rtl::type_meta () };
172173
173- for (auto & fnMeta : m_functorsMeta)
174+ for (auto & ty_meta : m_functorsMeta)
174175 {
175- if (argsTfnMeta.is_empty () && strictArgsId == fnMeta .get_strict_args_id ()) {
176- argsTfnMeta = fnMeta ;
176+ if (argsTfnMeta.is_empty () && strictArgsId == ty_meta .get_strict_args_id ()) {
177+ argsTfnMeta = ty_meta ;
177178 }
178- if (normalArgsId == fnMeta .get_normal_args_id ())
179+ if (normalArgsId == ty_meta .get_normal_args_id ())
179180 {
180- if (normalArgsId == fnMeta .get_strict_args_id ()) {
181+ if (normalArgsId == ty_meta .get_strict_args_id ()) {
181182 // same normal & strict ids, means no refs exists in target function's signature
182183 // target's function signature is call by value, always at pos '0'.
183184 // if doesn't exists, this pos is occupied by an empty 'type_meta'.
184- overloadsFnMeta[0 ] = fnMeta ;
185+ overloadsFnMeta[0 ] = ty_meta ;
185186 }
186- else if (!fnMeta .is_any_arg_ncref ()) {
187+ else if (!ty_meta .is_any_arg_ncref ()) {
187188 // its a const-ref-overload with no non-const-ref in signature, added from pos '1' onwards.
188- overloadsFnMeta.push_back (fnMeta );
189+ overloadsFnMeta.push_back (ty_meta );
189190 }
190191 }
191192 }
192193
193- for (auto & fnMeta : m_functorsMeta) {
194- if (normalArgsId == fnMeta .get_normal_args_id () && fnMeta .is_any_arg_ncref ()) {
194+ for (auto & ty_meta : m_functorsMeta) {
195+ if (normalArgsId == ty_meta .get_normal_args_id () && ty_meta .is_any_arg_ncref ()) {
195196 // any remaining overload, const/non-const ref added from pos '1' onwards.
196- overloadsFnMeta.push_back (fnMeta );
197+ overloadsFnMeta.push_back (ty_meta );
197198 }
198199 }
199200 return { argsTfnMeta, overloadsFnMeta };
0 commit comments