14 requires(concepts::ConstructibleFrom<meta::Decay<F>, F>)
15 struct YCombinator : pipeline::EnablePipeline {
18 constexpr YCombinator(InPlace, Fn&& function) : m_function(util::forward<Fn>(function)) {}
20 YCombinator(YCombinator
const&) =
default;
21 YCombinator(YCombinator&&) =
default;
23 auto operator=(YCombinator
const&) -> YCombinator& =
delete;
24 auto operator=(YCombinator&&) -> YCombinator& =
delete;
26 template<
typename... Args>
27 requires(concepts::Invocable<F&, YCombinator&, Args...>)
28 constexpr auto operator()(Args&&... args) & ->
decltype(
auto) {
32 template<
typename... Args>
33 requires(concepts::Invocable<F
const&, YCombinator
const&, Args...>)
34 constexpr auto operator()(Args&&... args)
const& ->
decltype(
auto) {
38 template<
typename... Args>
39 requires(concepts::Invocable<F &&, YCombinator &&, Args...>)
40 constexpr auto operator()(Args&&... args) && ->
decltype(
auto) {
41 return function::invoke(util::move(m_function), util::move(*
this), util::forward<Args>(args)...);
44 template<
typename... Args>
45 requires(concepts::Invocable<F
const &&, YCombinator
const &&, Args...>)
46 constexpr auto operator()(Args&&... args)
const&& ->
decltype(
auto) {
47 return function::invoke(util::move(m_function), util::move(*
this), util::forward<Args>(args)...);
56 requires(concepts::ConstructibleFrom<meta::Decay<F>, F>)
57 constexpr auto operator()(F&& function)
const {
58 return YCombinator<F>(in_place, util::forward<F>(function));
63constexpr inline auto ycombinator = detail::YCombinatorFunction {};
constexpr auto invoke
Definition invoke.h:100
constexpr auto ycombinator
Definition ycombinator.h:63
Definition any_storable.h:9