mirror of
https://github.com/Naios/continuable.git
synced 2025-12-07 17:26:47 +08:00
Readd return type deduction
This commit is contained in:
parent
7db24574ae
commit
0e80147343
@ -71,7 +71,10 @@ namespace cti {
|
||||
///
|
||||
/// \since 3.0.0
|
||||
template <typename Mapper, typename... T>
|
||||
decltype(auto) map_pack(Mapper&& mapper, T&&... pack) {
|
||||
auto map_pack(Mapper&& mapper, T&&... pack)
|
||||
-> decltype(detail::traversal::transform(
|
||||
detail::traversal::strategy_remap_tag{}, std::forward<Mapper>(mapper),
|
||||
std::forward<T>(pack)...)) {
|
||||
return detail::traversal::transform(detail::traversal::strategy_remap_tag{},
|
||||
std::forward<Mapper>(mapper),
|
||||
std::forward<T>(pack)...);
|
||||
@ -83,7 +86,7 @@ decltype(auto) map_pack(Mapper&& mapper, T&&... pack) {
|
||||
///
|
||||
/// \since 3.0.0
|
||||
template <typename... T>
|
||||
constexpr decltype(auto) spread_this(T&&... args) noexcept(
|
||||
constexpr auto spread_this(T&&... args) noexcept(
|
||||
noexcept(std::make_tuple(std::forward<T>(args)...))) {
|
||||
using type = detail::traversal::spreading::spread_box<std::decay_t<T>...>;
|
||||
return type(std::make_tuple(std::forward<T>(args)...));
|
||||
|
||||
@ -797,7 +797,10 @@ public:
|
||||
|
||||
/// \copybrief try_traverse
|
||||
template <typename T>
|
||||
decltype(auto) init_traverse(strategy_remap_tag, T&& element) {
|
||||
auto init_traverse(strategy_remap_tag, T&& element)
|
||||
-> decltype(spreading::unpack_or_void(
|
||||
std::declval<mapping_helper>().try_traverse(strategy_remap_tag{},
|
||||
std::declval<T>()))) {
|
||||
return spreading::unpack_or_void(
|
||||
try_traverse(strategy_remap_tag{}, std::forward<T>(element)));
|
||||
}
|
||||
@ -809,8 +812,15 @@ public:
|
||||
/// Calls the traversal method for every element in the pack,
|
||||
/// and returns a tuple containing the remapped content.
|
||||
template <typename First, typename Second, typename... T>
|
||||
decltype(auto) init_traverse(strategy_remap_tag strategy, First&& first,
|
||||
Second&& second, T&&... rest) {
|
||||
auto init_traverse(strategy_remap_tag strategy, First&& first,
|
||||
Second&& second, T&&... rest)
|
||||
-> decltype(spreading::tupelize_or_void(
|
||||
std::declval<mapping_helper>().try_traverse(
|
||||
strategy, std::forward<First>(first)),
|
||||
std::declval<mapping_helper>().try_traverse(
|
||||
strategy, std::forward<Second>(second)),
|
||||
std::declval<mapping_helper>().try_traverse(
|
||||
strategy, std::forward<T>(rest))...)) {
|
||||
return spreading::tupelize_or_void(
|
||||
try_traverse(strategy, std::forward<First>(first)),
|
||||
try_traverse(strategy, std::forward<Second>(second)),
|
||||
@ -832,7 +842,9 @@ public:
|
||||
|
||||
/// Traverses the given pack with the given mapper and strategy
|
||||
template <typename Strategy, typename Mapper, typename... T>
|
||||
decltype(auto) transform(Strategy strategy, Mapper&& mapper, T&&... pack) {
|
||||
auto transform(Strategy strategy, Mapper&& mapper, T&&... pack) -> decltype(
|
||||
std::declval<mapping_helper<Strategy, typename std::decay<Mapper>::type>>()
|
||||
.init_traverse(strategy, std::forward<T>(pack)...)) {
|
||||
mapping_helper<Strategy, typename std::decay<Mapper>::type> helper(
|
||||
std::forward<Mapper>(mapper));
|
||||
return helper.init_traverse(strategy, std::forward<T>(pack)...);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user