@@ -14,58 +14,19 @@ namespace stdsharp::reflection
1414
1515 namespace details
1616 {
17- template <::std::convertible_to<::std::string_view> auto Literal>
18- struct member_t
19- {
20- static constexpr ::std::string_view name = Literal;
21- };
22-
2317 template <typename >
2418 struct is_std_pair ;
2519
2620 template <typename T, typename U>
2721 struct is_std_pair <::std::pair<T, U>>
2822 {
2923 };
30-
31- template <auto Literal>
32- struct data_member_t : details::member_t <Literal>
33- {
34- template <typename T>
35- requires requires
36- {
37- requires static_cast <::std::string_view>(Literal) == " first" ;
38- is_std_pair<::std::remove_cvref_t <T>>{};
39- }
40- constexpr auto & operator ()(T&& p) const noexcept { return ::std::forward<T>(p).first ; }
41-
42- template <typename T>
43- requires requires
44- {
45- requires static_cast <::std::string_view>(Literal) == " second" ;
46- is_std_pair<::std::remove_cvref_t <T>>{};
47- }
48- constexpr auto & operator ()(T&& p) const noexcept { return ::std::forward<T>(p).second ; }
49- };
50-
51- template <auto Literal>
52- struct member_function_t : details::member_t <Literal>
53- {
54- };
5524 }
5625
57- template <auto Literal>
26+ template <::std::convertible_to<::std::string_view> auto Literal>
5827 struct member_t
5928 {
60- template <typename ... Args>
61- requires (
62- ::std::invocable<details::member_t <Literal>, Args...> &&
63- !functional::cpo_invocable<member_t <Literal>, Args...>)
64- constexpr decltype (auto ) operator()(Args&&... args) const
65- noexcept (concepts::nothrow_invocable<details::member_t <Literal>, Args...>)
66- {
67- return details::member_t <Literal>{}(::std::forward<Args>(args)...);
68- }
29+ static constexpr ::std::string_view name = Literal;
6930
7031 template <typename ... Args>
7132 requires functional::cpo_invocable<member_t <Literal>, Args...>
@@ -80,20 +41,26 @@ namespace stdsharp::reflection
8041 inline constexpr member_t <Literal> member{};
8142
8243 template <auto Literal>
83- struct data_member_t
44+ struct data_member_t : member_t <Literal>
8445 {
8546 // NOLINTNEXTLINE(hicpp-explicit-conversions)
8647 constexpr data_member_t (const member_t <Literal> = {}) noexcept {}
8748
88- template <typename ... Args>
89- requires (
90- ::std::invocable<details::data_member_t <Literal>, Args...> &&
91- !functional::cpo_invocable<data_member_t <Literal>, Args...>)
92- constexpr decltype (auto ) operator()(Args&&... args) const
93- noexcept (concepts::nothrow_invocable<details::data_member_t <Literal>, Args...>)
94- {
95- return details::data_member_t <Literal>{}(::std::forward<Args>(args)...);
96- }
49+ template <typename T>
50+ requires requires
51+ {
52+ requires static_cast <::std::string_view>(Literal) == " first" ;
53+ details::is_std_pair<::std::remove_cvref_t <T>>{};
54+ }
55+ constexpr auto & operator ()(T&& p) const noexcept { return ::std::forward<T>(p).first ; }
56+
57+ template <typename T>
58+ requires requires
59+ {
60+ requires static_cast <::std::string_view>(Literal) == " second" ;
61+ details::is_std_pair<::std::remove_cvref_t <T>>{};
62+ }
63+ constexpr auto & operator ()(T&& p) const noexcept { return ::std::forward<T>(p).second ; }
9764
9865 template <typename ... Args>
9966 requires functional::cpo_invocable<data_member_t <Literal>, Args...>
@@ -113,16 +80,6 @@ namespace stdsharp::reflection
11380 // NOLINTNEXTLINE(hicpp-explicit-conversions)
11481 constexpr member_function_t (const member_t <Literal> = {}) noexcept {}
11582
116- template <typename ... Args>
117- requires (
118- ::std::invocable<details::member_function_t <Literal>, Args...> &&
119- !functional::cpo_invocable<member_function_t <Literal>, Args...>)
120- constexpr decltype (auto ) operator()(Args&&... args) const
121- noexcept (concepts::nothrow_invocable<details::member_function_t <Literal>, Args...>)
122- {
123- return details::member_function_t <Literal>{}(::std::forward<Args>(args)...);
124- }
125-
12683 template <typename ... Args>
12784 requires functional::cpo_invocable<member_function_t <Literal>, Args...>
12885 constexpr decltype (auto ) operator()(Args&&... args) const
0 commit comments