Iros
Loading...
Searching...
No Matches
if_error.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
IfErrorFunction
{
11
template
<concepts::Expected T, concepts::InvocableTo<
void
, meta::Like<T, meta::ExpectedError<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.error());
16
}
17
return
util::forward<T>(expected);
18
}
19
20
template
<concepts::Expected T,
typename
F>
21
requires
(
concepts::DecayConstructible<T>
&&
concepts::LanguageVoid<meta::ExpectedError<T>
>)
22
constexpr
auto
operator
()(T&& expected, F&&)
const
{
23
return
util::forward<T>(expected);
24
}
25
};
26
}
27
28
constexpr
inline
auto
if_error
=
function::curry_back
(
detail::IfErrorFunction
{},
meta::c_<2ZU>
);
29
}
30
31
namespace
di
{
32
using
vocab::if_error
;
33
}
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_error
constexpr auto if_error
Definition
if_error.h:28
di
Definition
zstring_parser.h:9
di::vocab::detail::IfErrorFunction
Definition
if_error.h:10
util.h
vocab.h
libs
di
include
di
vocab
expected
if_error.h
Generated by
1.13.0