Iros
Loading...
Searching...
No Matches
if_success.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/function/curry_back.h
"
4
#include "
di/function/invoke.h
"
5
#include "
di/meta/util.h
"
6
#include "
di/meta/vocab.h
"
7
8
namespace
di::vocab
{
9
namespace
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
31
constexpr
inline
auto
if_success
=
function::curry_back
(
detail::IfSuccessFunction
{},
meta::c_<2ZU>
);
32
}
33
34
namespace
di
{
35
using
vocab::if_success
;
36
}
di::concepts::DecayConstructible
Definition
util.h:65
di::concepts::LanguageVoid
Definition
core.h:128
curry_back.h
invoke.h
di::function
Definition
as_bool.h:8
di::function::invoke
constexpr auto invoke
Definition
invoke.h:100
di::function::curry_back
constexpr auto curry_back
Definition
curry_back.h:141
di::meta::c_
constexpr auto c_
A value of type Constexpr<val>.
Definition
constexpr.h:252
di::vocab::detail
Definition
erasure_cast.h:7
di::vocab
Definition
lazy.h:165
di::vocab::if_success
constexpr auto if_success
Definition
if_success.h:31
di
Definition
zstring_parser.h:9
di::vocab::detail::IfSuccessFunction
Definition
if_success.h:10
util.h
vocab.h
libs
di
include
di
vocab
expected
if_success.h
Generated by
1.13.0