di 0.1.0
Loading...
Searching...
No Matches
if_success.h
Go to the documentation of this file.
1#pragma once
2
5#include "di/meta/util.h"
6#include "di/meta/vocab.h"
7
8namespace di::vocab {
9namespace detail {
10 struct IfSuccessFunction {
11 template<concepts::Expected T, concepts::InvocableTo<void, meta::Like<T, meta::ExpectedValue<T>>&> F>
12 requires(concepts::DecayConstructible<T>)
13 constexpr auto operator()(T&& expected, F&& function) const {
14 if (expected) {
15 function::invoke(util::forward<F>(function), expected.value());
16 }
17 return util::forward<T>(expected);
18 }
19
20 template<concepts::Expected T, concepts::InvocableTo<void> F>
21 requires(concepts::DecayConstructible<T> && concepts::LanguageVoid<meta::ExpectedValue<T>>)
22 constexpr auto operator()(T&& expected, F&& function) const {
23 if (expected) {
24 function::invoke(util::forward<F>(function));
25 }
26 return util::forward<T>(expected);
27 }
28 };
29}
30
31constexpr inline auto if_success = function::curry_back(detail::IfSuccessFunction {}, meta::c_<2ZU>);
32}
33
34namespace di {
36}
constexpr auto invoke
Definition invoke.h:100
constexpr auto curry_back
Definition curry_back.h:141
constexpr auto c_
A value of type Constexpr<val>.
Definition constexpr.h:252
Definition lazy.h:165
constexpr auto if_success
Definition if_success.h:31
Definition any_storable.h:9