Iros
 
Loading...
Searching...
No Matches
invoke.h File Reference
#include "di/meta/language.h"
#include "di/meta/operations.h"
#include "di/meta/util.h"
#include "di/meta/vocab.h"
#include "di/util/declval.h"
#include "di/util/forward.h"

Go to the source code of this file.

Classes

struct  di::function::detail::InvokeFunction
 
struct  di::function::detail::InvokeRFunction< R >
 

Namespaces

namespace  di
 
namespace  di::function
 
namespace  di::function::detail
 
namespace  di::concepts
 
namespace  di::meta
 

Concepts

concept  di::concepts::Invocable
 
concept  di::concepts::InvocableTo
 
concept  di::concepts::InvocableR
 

Typedefs

template<typename... Ts>
using di::meta::InvokeResult = decltype(function::detail::invoke_impl(util::declval<Ts>()...))
 
template<typename... Ts>
using di::InvokeResult
 

Functions

template<concepts::MemberFunctionPointer F, typename FirstArg, typename... Args>
requires (concepts::BaseOf<meta::MemberPointerClass<F>, meta::Decay<FirstArg>>)
constexpr auto di::function::detail::invoke_impl (F f, FirstArg &&first_arg, Args &&... args) -> decltype((util::forward< FirstArg >(first_arg).*f)(util::forward< Args >(args)...))
 
template<concepts::MemberFunctionPointer F, typename FirstArg, typename... Args>
requires (concepts::ReferenceWrapper<meta::Decay<FirstArg>>)
constexpr auto di::function::detail::invoke_impl (F f, FirstArg &&first_arg, Args &&... args) -> decltype((first_arg.get().*f)(util::forward< Args >(args)...))
 
template<concepts::MemberFunctionPointer F, typename FirstArg, typename... Args>
constexpr auto di::function::detail::invoke_impl (F f, FirstArg &&first_arg, Args &&... args) -> decltype(((*util::forward< FirstArg >(first_arg)).*f)(util::forward< Args >(args)...))
 
template<concepts::MemberObjectPointer F, typename Arg>
requires (concepts::BaseOf<meta::MemberPointerClass<F>, meta::Decay<Arg>>)
constexpr auto di::function::detail::invoke_impl (F f, Arg &&arg) -> decltype(util::forward< Arg >(arg).*f)
 
template<concepts::MemberObjectPointer F, typename Arg>
requires (concepts::ReferenceWrapper<meta::Decay<Arg>>)
constexpr auto di::function::detail::invoke_impl (F f, Arg &&arg) -> decltype(arg.get().*f)
 
template<concepts::MemberObjectPointer F, typename Arg>
constexpr auto di::function::detail::invoke_impl (F f, Arg &&arg) -> decltype((*util::forward< Arg >(arg)).*f)
 
template<typename F, typename... Args>
constexpr auto di::function::detail::invoke_impl (F &&f, Args &&... args) -> decltype(util::forward< F >(f)(util::forward< Args >(args)...))
 

Variables

constexpr auto di::function::invoke = function::detail::InvokeFunction {}
 
template<typename R>
constexpr auto di::function::invoke_r = function::detail::InvokeRFunction<R> {}
 
constexpr auto di::invoke
 
template<typename R>
constexpr auto di::invoke_r