di 0.1.0
Loading...
Searching...
No Matches
invoke_as_fallible.h
Go to the documentation of this file.
1#pragma once
2
5#include "di/meta/language.h"
7#include "di/meta/util.h"
8#include "di/meta/vocab.h"
11
12namespace di::vocab {
13namespace detail {
14 struct InvokeAsFallibleFunction : function::pipeline::EnablePipeline {
15 template<typename F, typename... Args, concepts::DecayConstructible R = meta::InvokeResult<F, Args...>>
16 requires(concepts::Expected<R>)
17 constexpr auto operator()(F&& function, Args&&... args) const -> meta::Decay<R> {
18 return function::invoke(util::forward<F>(function), util::forward<Args>(args)...);
19 }
20
21 template<typename F, typename... Args, typename R = meta::InvokeResult<F, Args...>,
22 typename G = Expected<meta::UnwrapRefRValue<R>, void>>
23 requires(!concepts::Expected<R> && concepts::ConstructibleFrom<G, R>)
24 constexpr auto operator()(F&& function, Args&&... args) const -> G {
25 return G { function::invoke(util::forward<F>(function), util::forward<Args>(args)...) };
26 }
27
28 template<typename F, typename... Args, typename R = meta::InvokeResult<F, Args...>>
29 requires(concepts::LanguageVoid<R>)
30 constexpr auto operator()(F&& function, Args&&... args) const -> Expected<void, void> {
31 function::invoke(util::forward<F>(function), util::forward<Args>(args)...);
32 return {};
33 }
34 };
35}
36
37constexpr inline auto invoke_as_fallible = detail::InvokeAsFallibleFunction {};
38}
39
40namespace di {
41using vocab::invoke_as_fallible;
42}
constexpr auto invoke
Definition invoke.h:100
Conditional< concepts::LanguageArray< RemoveReference< T > >, RemoveExtent< RemoveReference< T > > *, Conditional< concepts::LanguageFunction< RemoveReference< T > >, AddPointer< RemoveReference< T > >, RemoveCVRef< T > > > Decay
Definition language.h:574
decltype(function::detail::invoke_impl(util::declval< Ts >()...)) InvokeResult
Definition invoke.h:64
Definition lazy.h:165
constexpr auto invoke_as_fallible
Definition invoke_as_fallible.h:37
Expected(T &&) -> Expected< meta::UnwrapRefDecay< T >, void >
Definition any_storable.h:9