35 RANGES_NO_UNIQUE_ADDRESS
37 RANGES_NO_UNIQUE_ADDRESS
41 template<
typename A,
typename B,
typename... Ts>
43 CPP_auto_fun(do_)(A &&a, B &&b, std::false_type, Ts &&... ts)
45 return invoke((B &&) b, invoke((A &&) a, (Ts &&) ts...))
47 template<typename A, typename B, typename... Ts>
48 static constexpr auto CPP_auto_fun(do_)(A &&a, B &&b, std::true_type, Ts &&... ts)
50 return (invoke((A &&) a, (Ts &&) ts...), invoke((B &&) b))
55 constexpr composed(Second second, First first)
56 : first_(std::move(first))
57 , second_(std::move(second))
60 template<
typename... Ts>
61 constexpr auto CPP_auto_fun(
operator())(Ts &&... ts)(
mutable &)
63 return composed::do_(first_,
65 std::is_void<invoke_result_t<First &, Ts...>>{},
68 template<typename... Ts>
69 constexpr auto CPP_auto_fun(
operator())(Ts &&... ts)(
const &)
71 return composed::do_((First
const &)first_,
72 (Second
const &)second_,
73 std::is_void<invoke_result_t<First const &, Ts...>>{},
76 template<typename... Ts>
77 constexpr auto CPP_auto_fun(
operator())(Ts &&... ts)(
mutable &&)
79 return composed::do_((First &&)first_,
81 std::is_void<invoke_result_t<First &&, Ts...>>{},