1#ifndef HALCHECK_LIB_FUNCTIONAL_INVOKE_HPP
2#define HALCHECK_LIB_FUNCTIONAL_INVOKE_HPP
6#include <halcheck/lib/pp.hpp>
7#include <halcheck/lib/type_traits.hpp>
9namespace halcheck {
namespace lib {
41template<
typename F,
typename... Args>
45template<
typename R,
typename F,
typename... Args>
53template<
typename R,
typename F,
typename... Args>
57template<
typename F,
typename... Args>
65template<
typename F,
typename... Args>
69template<
typename F,
typename... Args>
77template<
typename F,
typename... Args>
81template<
typename R,
typename F,
typename... Args>
82using nothrow_invocable_r =
lib::void_t<lib::invocable_r<R, F, Args...>, lib::nothrow_invocable<F, Args...>>;
89template<
typename R,
typename F,
typename... Args>
HALCHECK_INLINE_CONSTEXPR struct halcheck::lib::@20 invoke
An implementation of std::invoke.
decltype(lib::invoke(std::declval< F >(), std::declval< Args >()...)) invoke_result_t
An implementation of std::invoke_result_t.
Definition invoke.hpp:42
#define HALCHECK_INLINE_CONSTEXPR
A backwards-compatible substitute for inline constexpr.
Definition pp.hpp:70
typename std::decay< T >::type decay_t
An implementation of std::decay_t.
Definition type_traits.hpp:101
typename std::enable_if< Cond, T >::type enable_if_t
An implementation of std::enable_if_t.
Definition type_traits.hpp:93
void void_t
An implementation of std::void_t.
Definition type_traits.hpp:43
#define HALCHECK_REQUIRE(...)
Expands to a template argument that is only valid if the given argument evaluates to true.
Definition type_traits.hpp:24
An implementation of std::experimental::is_detected.
Definition type_traits.hpp:247
An implementation of std::is_invocable_r.
Definition invoke.hpp:54
An implementation of std::is_invocable.
Definition invoke.hpp:66
An implementation of std::is_nothrow_invocable_r.
Definition invoke.hpp:90
An implementation of std::is_nothrow_invocable.
Definition invoke.hpp:78