hpx/functional/traits/is_invocable.hpp#

See Public API for a list of names and headers that are part of the public HPX API.

namespace hpx

Variables

template<typename F, typename ...Ts>
constexpr bool is_invocable_v = is_invocable<F, Ts...>::value#
template<typename R, typename F, typename ...Ts>
constexpr bool is_invocable_r_v = is_invocable_r<R, F, Ts...>::value#
template<typename F, typename ...Ts>
constexpr bool is_nothrow_invocable_v = is_nothrow_invocable<F, Ts...>::value#
template<typename F, typename ...Ts>
struct is_invocable : public hpx::detail::is_invocable_impl<F&&(Ts&&...), void>#
#include <is_invocable.hpp>

Determines whether F can be invoked with the arguments Ts…. Formally, determines whether.

INVOKE(std::declval<F>(), std::declval<Ts>()...) 
is well formed when treated as an unevaluated operand, where INVOKE is the operation defined in Callable.

F, R and all types in the parameter pack Ts shall each be a complete type, (possibly cv-qualified) void, or an array of unknown bound. Otherwise, the behavior is undefined. If an instantiation of a template above depends, directly or indirectly, on an incomplete type, and that instantiation could yield a different result if that type were hypothetically completed, the behavior is undefined.

template<typename R, typename F, typename ...Ts>
struct is_invocable_r : public hpx::detail::is_invocable_r_impl<F&&(Ts&&...), R>#
#include <is_invocable.hpp>

Determines whether F can be invoked with the arguments Ts… to yield a result that is convertible to R and the implicit conversion does not bind a reference to a temporary object (since C++23). If R is cv void, the result can be any type. Formally, determines whether

INVOKE<R>(std::declval<F>(), std::declval<Ts>()...) 
is well formed when treated as an unevaluated operand, where INVOKE is the operation defined in Callable.
INVOKE(std::declval<F>(), std::declval<Ts>()...) 
is well formed when treated as an unevaluated operand, where INVOKE is the operation defined in Callable.

F, R and all types in the parameter pack Ts shall each be a complete type, (possibly cv-qualified) void, or an array of unknown bound. Otherwise, the behavior is undefined. If an instantiation of a template above depends, directly or indirectly, on an incomplete type, and that instantiation could yield a different result if that type were hypothetically completed, the behavior is undefined.

template<typename F, typename ...Ts>
struct is_nothrow_invocable : public hpx::detail::is_nothrow_invocable_impl<F(Ts...), is_invocable_v<F, Ts...>>#