|
1 | 1 | #include "detail/tuple_types.hpp" |
2 | 2 |
|
| 3 | +#include <stdx/ct_string.hpp> |
3 | 4 | #include <stdx/span.hpp> |
4 | 5 | #include <stdx/tuple_algorithms.hpp> |
5 | 6 | #include <stdx/utility.hpp> |
@@ -979,31 +980,26 @@ TEST_CASE("gather with move only types", "[tuple_algorithms]") { |
979 | 980 | } |
980 | 981 |
|
981 | 982 | namespace { |
982 | | -template <typename T> struct named_int { |
983 | | - using name_t = T; |
| 983 | +template <stdx::ct_string Name> struct named_int : stdx::with_name<Name> { |
| 984 | + constexpr named_int(int v) : value{v} {} |
984 | 985 | int value; |
985 | 986 | friend constexpr auto operator==(named_int, named_int) -> bool = default; |
986 | 987 | }; |
987 | | - |
988 | | -template <typename T> using name_of_t = typename T::name_t; |
989 | 988 | } // namespace |
990 | 989 |
|
991 | 990 | TEST_CASE("gather_by with projection", "[tuple_algorithms]") { |
992 | | - struct A; |
993 | | - struct B; |
994 | | - struct C; |
995 | | - constexpr auto t = stdx::tuple{named_int<C>{3}, named_int<B>{11}, |
996 | | - named_int<A>{0}, named_int<B>{12}}; |
997 | | - constexpr auto gathered = stdx::gather_by<name_of_t>(t); |
| 991 | + constexpr auto t = stdx::tuple{named_int<"C">{3}, named_int<"B">{11}, |
| 992 | + named_int<"A">{0}, named_int<"B">{12}}; |
| 993 | + constexpr auto gathered = stdx::gather_by<stdx::constant_name_of_t>(t); |
998 | 994 | STATIC_REQUIRE( |
999 | 995 | std::is_same_v<decltype(gathered), |
1000 | | - stdx::tuple<stdx::tuple<named_int<A>>, |
1001 | | - stdx::tuple<named_int<B>, named_int<B>>, |
1002 | | - stdx::tuple<named_int<C>>> const>); |
1003 | | - CHECK(get<0>(gathered) == stdx::tuple{named_int<A>{0}}); |
| 996 | + stdx::tuple<stdx::tuple<named_int<"A">>, |
| 997 | + stdx::tuple<named_int<"B">, named_int<"B">>, |
| 998 | + stdx::tuple<named_int<"C">>> const>); |
| 999 | + CHECK(get<0>(gathered) == stdx::tuple{named_int<"A">{0}}); |
1004 | 1000 | CHECK(stdx::get<1>(gathered).fold_left( |
1005 | 1001 | 0, [](auto x, auto y) { return x + y.value; }) == 23); |
1006 | | - CHECK(get<2>(gathered) == stdx::tuple{named_int<C>{3}}); |
| 1002 | + CHECK(get<2>(gathered) == stdx::tuple{named_int<"C">{3}}); |
1007 | 1003 | } |
1008 | 1004 |
|
1009 | 1005 | TEST_CASE("tuple_cons", "[tuple_algorithms]") { |
|
0 commit comments