@@ -924,6 +924,43 @@ class proxy_indirect_accessor
924924 proxy_indirect_accessor () = default ;
925925 proxy_indirect_accessor (const proxy_indirect_accessor&) = default ;
926926 proxy_indirect_accessor& operator =(const proxy_indirect_accessor&) = default ;
927+
928+ public:
929+ template <class D , class O , class ... Args>
930+ friend auto invoke (proxy_indirect_accessor& p, Args&&... args) ->
931+ typename details::overload_traits<O>::return_type {
932+ return details::invoke_impl<F, false , D, O>(
933+ details::as_proxy<F, details::qualifier_type::lv>(p),
934+ std::forward<Args>(args)...);
935+ }
936+ template <class D , class O , class ... Args>
937+ friend auto invoke (const proxy_indirect_accessor& p, Args&&... args) ->
938+ typename details::overload_traits<O>::return_type {
939+ return details::invoke_impl<F, false , D, O>(
940+ details::as_proxy<F, details::qualifier_type::const_lv>(p),
941+ std::forward<Args>(args)...);
942+ }
943+ template <class D , class O , class ... Args>
944+ friend auto invoke (proxy_indirect_accessor&& p, Args&&... args) ->
945+ typename details::overload_traits<O>::return_type {
946+ return details::invoke_impl<F, false , D, O>(
947+ details::as_proxy<F, details::qualifier_type::rv>(std::move (p)),
948+ std::forward<Args>(args)...);
949+ }
950+ template <class D , class O , class ... Args>
951+ friend auto invoke (const proxy_indirect_accessor&& p, Args&&... args) ->
952+ typename details::overload_traits<O>::return_type {
953+ return details::invoke_impl<F, false , D, O>(
954+ details::as_proxy<F, details::qualifier_type::const_rv>(std::move (p)),
955+ std::forward<Args>(args)...);
956+ }
957+ template <class R >
958+ friend const R& reflect (const proxy_indirect_accessor& p) noexcept {
959+ return static_cast <const details::refl_meta<false , R>&>(
960+ details::proxy_helper::get_meta (
961+ details::as_proxy<F, details::qualifier_type::const_lv>(p)))
962+ .reflector ;
963+ }
927964};
928965
929966template <facade F>
@@ -1118,6 +1155,34 @@ class proxy : public details::facade_traits<F>::direct_accessor,
11181155 friend bool operator ==(const proxy& lhs, std::nullptr_t ) noexcept {
11191156 return !lhs.has_value ();
11201157 }
1158+ template <class D , class O , class ... Args>
1159+ friend auto invoke (proxy& p, Args&&... args) ->
1160+ typename details::overload_traits<O>::return_type {
1161+ return details::invoke_impl<F, true , D, O>(p, std::forward<Args>(args)...);
1162+ }
1163+ template <class D , class O , class ... Args>
1164+ friend auto invoke (const proxy& p, Args&&... args) ->
1165+ typename details::overload_traits<O>::return_type {
1166+ return details::invoke_impl<F, true , D, O>(p, std::forward<Args>(args)...);
1167+ }
1168+ template <class D , class O , class ... Args>
1169+ friend auto invoke (proxy<F>&& p, Args&&... args) ->
1170+ typename details::overload_traits<O>::return_type {
1171+ return details::invoke_impl<F, true , D, O>(std::move (p),
1172+ std::forward<Args>(args)...);
1173+ }
1174+ template <class D , class O , class ... Args>
1175+ friend auto invoke (const proxy&& p, Args&&... args) ->
1176+ typename details::overload_traits<O>::return_type {
1177+ return details::invoke_impl<F, true , D, O>(std::move (p),
1178+ std::forward<Args>(args)...);
1179+ }
1180+ template <class R >
1181+ friend const R& reflect (const proxy& p) noexcept {
1182+ return static_cast <const details::refl_meta<true , R>&>(
1183+ details::proxy_helper::get_meta (p))
1184+ .reflector ;
1185+ }
11211186
11221187private:
11231188 void initialize () {
@@ -1133,10 +1198,9 @@ class proxy : public details::facade_traits<F>::direct_accessor,
11331198 std::ranges::uninitialized_copy (rhs.ptr_ , ptr_);
11341199 meta_ = rhs.meta_ ;
11351200 } else {
1136- proxy_invoke<details::copy_dispatch,
1137- void (proxy&) const noexcept (
1138- F::copyability == constraint_level::nothrow)>(rhs,
1139- *this );
1201+ invoke<details::copy_dispatch,
1202+ void (proxy&) const noexcept (
1203+ F::copyability == constraint_level::nothrow)>(rhs, *this );
11401204 }
11411205 } else {
11421206 meta_.reset ();
@@ -1152,9 +1216,9 @@ class proxy : public details::facade_traits<F>::direct_accessor,
11521216 meta_ = rhs.meta_ ;
11531217 rhs.meta_ .reset ();
11541218 } else {
1155- proxy_invoke <details::relocate_dispatch,
1156- void (proxy&) && noexcept (F::relocatability ==
1157- constraint_level::nothrow)>(
1219+ invoke <details::relocate_dispatch,
1220+ void (proxy&) &&
1221+ noexcept (F::relocatability == constraint_level::nothrow)>(
11581222 std::move (rhs), *this );
11591223 }
11601224 } else {
@@ -1179,9 +1243,9 @@ class proxy : public details::facade_traits<F>::direct_accessor,
11791243 {
11801244 if constexpr (F::destructibility != constraint_level::trivial) {
11811245 if (meta_.has_value ()) {
1182- proxy_invoke <details::destroy_dispatch,
1183- void () noexcept (F::destructibility ==
1184- constraint_level::nothrow)>(*this );
1246+ invoke <details::destroy_dispatch,
1247+ void () noexcept (F::destructibility ==
1248+ constraint_level::nothrow)>(*this );
11851249 }
11861250 }
11871251 }
@@ -1200,35 +1264,40 @@ class proxy : public details::facade_traits<F>::direct_accessor,
12001264};
12011265
12021266template <class D , class O , facade F, class ... Args>
1203- auto proxy_invoke (proxy_indirect_accessor<F>& p, Args&&... args) ->
1267+ [[deprecated(" Use unqualified invoke instead" )]] auto
1268+ proxy_invoke (proxy_indirect_accessor<F>& p, Args&&... args) ->
12041269 typename details::overload_traits<O>::return_type {
12051270 return details::invoke_impl<F, false , D, O>(
12061271 details::as_proxy<F, details::qualifier_type::lv>(p),
12071272 std::forward<Args>(args)...);
12081273}
12091274template <class D , class O , facade F, class ... Args>
1210- auto proxy_invoke (const proxy_indirect_accessor<F>& p, Args&&... args) ->
1275+ [[deprecated(" Use unqualified invoke instead" )]] auto
1276+ proxy_invoke (const proxy_indirect_accessor<F>& p, Args&&... args) ->
12111277 typename details::overload_traits<O>::return_type {
12121278 return details::invoke_impl<F, false , D, O>(
12131279 details::as_proxy<F, details::qualifier_type::const_lv>(p),
12141280 std::forward<Args>(args)...);
12151281}
12161282template <class D , class O , facade F, class ... Args>
1217- auto proxy_invoke (proxy_indirect_accessor<F>&& p, Args&&... args) ->
1283+ [[deprecated(" Use unqualified invoke instead" )]] auto
1284+ proxy_invoke (proxy_indirect_accessor<F>&& p, Args&&... args) ->
12181285 typename details::overload_traits<O>::return_type {
12191286 return details::invoke_impl<F, false , D, O>(
12201287 details::as_proxy<F, details::qualifier_type::rv>(std::move (p)),
12211288 std::forward<Args>(args)...);
12221289}
12231290template <class D , class O , facade F, class ... Args>
1224- auto proxy_invoke (const proxy_indirect_accessor<F>&& p, Args&&... args) ->
1291+ [[deprecated(" Use unqualified invoke instead" )]] auto
1292+ proxy_invoke (const proxy_indirect_accessor<F>&& p, Args&&... args) ->
12251293 typename details::overload_traits<O>::return_type {
12261294 return details::invoke_impl<F, false , D, O>(
12271295 details::as_proxy<F, details::qualifier_type::const_rv>(std::move (p)),
12281296 std::forward<Args>(args)...);
12291297}
12301298template <class D , class O , facade F, class ... Args>
1231- auto proxy_invoke (proxy<F>& p, Args&&... args) ->
1299+ [[deprecated(" Use unqualified invoke instead" )]] auto
1300+ proxy_invoke (proxy<F>& p, Args&&... args) ->
12321301 typename details::overload_traits<O>::return_type {
12331302 return details::invoke_impl<F, true , D, O>(p, std::forward<Args>(args)...);
12341303}
@@ -1238,27 +1307,31 @@ auto proxy_invoke(const proxy<F>& p, Args&&... args) ->
12381307 return details::invoke_impl<F, true , D, O>(p, std::forward<Args>(args)...);
12391308}
12401309template <class D , class O , facade F, class ... Args>
1241- auto proxy_invoke (proxy<F>&& p, Args&&... args) ->
1310+ [[deprecated(" Use unqualified invoke instead" )]] auto
1311+ proxy_invoke (proxy<F>&& p, Args&&... args) ->
12421312 typename details::overload_traits<O>::return_type {
12431313 return details::invoke_impl<F, true , D, O>(std::move (p),
12441314 std::forward<Args>(args)...);
12451315}
12461316template <class D , class O , facade F, class ... Args>
1247- auto proxy_invoke (const proxy<F>&& p, Args&&... args) ->
1317+ [[deprecated(" Use unqualified invoke instead" )]] auto
1318+ proxy_invoke (const proxy<F>&& p, Args&&... args) ->
12481319 typename details::overload_traits<O>::return_type {
12491320 return details::invoke_impl<F, true , D, O>(std::move (p),
12501321 std::forward<Args>(args)...);
12511322}
12521323
12531324template <class R , facade F>
1254- const R& proxy_reflect (const proxy_indirect_accessor<F>& p) noexcept {
1325+ [[deprecated(" Use unqualified reflect instead" )]] const R&
1326+ proxy_reflect (const proxy_indirect_accessor<F>& p) noexcept {
12551327 return static_cast <const details::refl_meta<false , R>&>(
12561328 details::proxy_helper::get_meta (
12571329 details::as_proxy<F, details::qualifier_type::const_lv>(p)))
12581330 .reflector ;
12591331}
12601332template <class R , facade F>
1261- const R& proxy_reflect (const proxy<F>& p) noexcept {
1333+ [[deprecated(" Use unqualified reflect instead" )]] const R&
1334+ proxy_reflect (const proxy<F>& p) noexcept {
12621335 return static_cast <const details::refl_meta<true , R>&>(
12631336 details::proxy_helper::get_meta (p))
12641337 .reflector ;
@@ -1324,7 +1397,7 @@ struct converter {
13241397 return nullptr ; \
13251398 } \
13261399 } \
1327- return proxy_invoke <D, T () oq ne>(static_cast <P pq>(*this )); \
1400+ return invoke <D, T () oq ne>(static_cast <P pq>(*this )); \
13281401 } \
13291402 }
13301403template <bool Expl, bool Nullable>
@@ -2209,7 +2282,7 @@ struct proxy_cast_accessor_impl {
22092282 .is_ref = true ,
22102283 .is_const = std::is_const_v<U>,
22112284 .result_ptr = &result};
2212- proxy_invoke <D, O>(static_cast <Self>(self), ctx);
2285+ invoke <D, O>(static_cast <Self>(self), ctx);
22132286 if (result == nullptr ) [[unlikely]] {
22142287 PRO4D_THROW (bad_proxy_cast{});
22152288 }
@@ -2220,7 +2293,7 @@ struct proxy_cast_accessor_impl {
22202293 .is_ref = false ,
22212294 .is_const = false ,
22222295 .result_ptr = &result};
2223- proxy_invoke <D, O>(static_cast <Self>(self), ctx);
2296+ invoke <D, O>(static_cast <Self>(self), ctx);
22242297 if (!result.has_value ()) [[unlikely]] {
22252298 PRO4D_THROW (bad_proxy_cast{});
22262299 }
@@ -2236,7 +2309,7 @@ struct proxy_cast_accessor_impl {
22362309 .is_ref = true ,
22372310 .is_const = std::is_const_v<T>,
22382311 .result_ptr = &result};
2239- proxy_invoke <D, O>(*self, ctx);
2312+ invoke <D, O>(*self, ctx);
22402313 return static_cast <T*>(result);
22412314 }
22422315};
@@ -2276,7 +2349,7 @@ struct proxy_typeid_reflector {
22762349 template <class Self , class R >
22772350 struct accessor {
22782351 friend const std::type_info& proxy_typeid (const Self& self) noexcept {
2279- const proxy_typeid_reflector& refl = proxy_reflect <R>(self);
2352+ const proxy_typeid_reflector& refl = reflect <R>(self);
22802353 return *refl.info ;
22812354 }
22822355 PRO4D_DEBUG (
@@ -2397,23 +2470,23 @@ struct operator_dispatch;
23972470 struct accessor <P, D, R() oq ne> { \
23982471 PRO4D_GEN_DEBUG_SYMBOL_FOR_MEM_ACCESSOR (__VA_ARGS__) \
23992472 R __VA_ARGS__ () oq ne { \
2400- return proxy_invoke <D, R () oq ne>(static_cast <P pq>(*this )); \
2473+ return invoke <D, R () oq ne>(static_cast <P pq>(*this )); \
24012474 } \
24022475 }
24032476#define PROD_DEF_LHS_UNARY_OP_ACCESSOR (oq, pq, ne, ...) \
24042477 template <class P , class D , class R > \
24052478 struct accessor <P, D, R() oq ne> { \
24062479 PRO4D_GEN_DEBUG_SYMBOL_FOR_MEM_ACCESSOR (__VA_ARGS__) \
24072480 decltype (auto ) __VA_ARGS__() oq ne { \
2408- proxy_invoke <D, R () oq ne>(static_cast <P pq>(*this )); \
2481+ invoke <D, R () oq ne>(static_cast <P pq>(*this )); \
24092482 return static_cast <P pq>(*this ); \
24102483 } \
24112484 }; \
24122485 template <class P , class D , class R > \
24132486 struct accessor <P, D, R(int ) oq ne> { \
24142487 PRO4D_GEN_DEBUG_SYMBOL_FOR_MEM_ACCESSOR (__VA_ARGS__) \
24152488 R __VA_ARGS__ (int ) oq ne { \
2416- return proxy_invoke <D, R (int ) oq ne>(static_cast <P pq>(*this ), 0 ); \
2489+ return invoke <D, R (int ) oq ne>(static_cast <P pq>(*this ), 0 ); \
24172490 } \
24182491 }
24192492#define PROD_DEF_LHS_BINARY_OP_ACCESSOR PRO4D_DEF_MEM_ACCESSOR
@@ -2448,8 +2521,8 @@ struct operator_dispatch;
24482521 template <class P , class D , class R , class Arg > \
24492522 struct accessor <P, D, R(Arg) oq ne> { \
24502523 friend R operator __VA_ARGS__ (Arg arg, P pq self) ne { \
2451- return proxy_invoke <D, R (Arg) oq ne>(static_cast <P pq>(self), \
2452- std::forward<Arg>(arg)); \
2524+ return invoke <D, R (Arg) oq ne>(static_cast <P pq>(self), \
2525+ std::forward<Arg>(arg)); \
24532526 } \
24542527 PRO4D_DEBUG ( \
24552528 accessor () noexcept { std::ignore = &pro_symbol_guard; } \
@@ -2484,16 +2557,16 @@ struct operator_dispatch;
24842557 struct accessor <P, D, R(Arg) oq ne> { \
24852558 PRO4D_GEN_DEBUG_SYMBOL_FOR_MEM_ACCESSOR (__VA_ARGS__) \
24862559 decltype (auto ) __VA_ARGS__(Arg arg) oq ne { \
2487- proxy_invoke <D, R (Arg) oq ne>(static_cast <P pq>(*this ), \
2488- std::forward<Arg>(arg)); \
2560+ invoke <D, R (Arg) oq ne>(static_cast <P pq>(*this ), \
2561+ std::forward<Arg>(arg)); \
24892562 return static_cast <P pq>(*this ); \
24902563 } \
24912564 }
24922565#define PROD_DEF_RHS_ASSIGNMENT_OP_ACCESSOR (oq, pq, ne, ...) \
24932566 template <class P , class D , class R , class Arg > \
24942567 struct accessor <P, D, R(Arg&) oq ne> { \
24952568 friend Arg& operator __VA_ARGS__ (Arg& arg, P pq self) ne { \
2496- proxy_invoke <D, R (Arg&) oq ne>(static_cast <P pq>(self), arg); \
2569+ invoke <D, R (Arg&) oq ne>(static_cast <P pq>(self), arg); \
24972570 return arg; \
24982571 } \
24992572 PRO4D_DEBUG ( \
@@ -2661,9 +2734,8 @@ struct formatter<pro::v4::proxy_indirect_accessor<F>, CharT> {
26612734 template <class OutIt >
26622735 OutIt format (const pro::v4::proxy_indirect_accessor<F>& p,
26632736 basic_format_context<OutIt, CharT>& fc) const {
2664- return pro::v4::proxy_invoke<pro::v4::details::format_dispatch,
2665- pro::v4::details::format_overload_t <CharT>>(
2666- p, spec_, fc);
2737+ return invoke<pro::v4::details::format_dispatch,
2738+ pro::v4::details::format_overload_t <CharT>>(p, spec_, fc);
26672739 }
26682740
26692741private:
0 commit comments