13 template<
typename F,
typename G>
14 class ChainFunction :
public pipeline::EnablePipeline {
16 template<
typename Fn,
typename Gn>
17 constexpr explicit ChainFunction(Fn&& f, Gn&& g) : m_f(util::forward<Fn>(f)), m_g(util::forward<Gn>(g)) {}
19 constexpr ChainFunction(ChainFunction
const&) =
default;
20 constexpr ChainFunction(ChainFunction&&) =
default;
22 constexpr auto operator=(ChainFunction
const&) -> ChainFunction& =
delete;
23 constexpr auto operator=(ChainFunction&&) -> ChainFunction& =
delete;
25 template<
typename... Args>
26 requires(concepts::Invocable<F&, Args...> && concepts::Invocable<G&,
meta::InvokeResult<F&, Args...>>)
27 constexpr auto operator()(Args&&... args) & ->
decltype(
auto) {
31 template<
typename... Args>
32 requires(concepts::Invocable<F
const&, Args...> &&
34 constexpr auto operator()(Args&&... args)
const& ->
decltype(
auto) {
38 template<
typename... Args>
39 requires(concepts::Invocable<F &&, Args...> && concepts::Invocable<G &&,
meta::InvokeResult<F &&, Args...>>)
40 constexpr auto operator()(Args&&... args) && ->
decltype(
auto) {
44 template<
typename... Args>
45 requires(concepts::Invocable<F
const &&, Args...> &&
47 constexpr auto operator()(Args&&... args)
const&& ->
decltype(
auto) {
58requires(concepts::ConstructibleFrom<meta::Decay<F>, F>)
63template<
typename F,
typename G,
typename... Fs>
66constexpr auto
chain(F&& f, G&& g, Fs&&... rest) {
69 util::forward<Fs>(rest)...);
Definition operations.h:11
constexpr auto invoke
Definition invoke.h:100
constexpr auto piped(F &&function)
Definition piped.h:56
constexpr auto chain(F &&f)
Definition chain.h:59
Definition any_storable.h:9