5 #ifndef VCCC_CONCEPTS_INVOCABLE_HPP
6 #define VCCC_CONCEPTS_INVOCABLE_HPP
18 template<
typename F,
typename Seq,
typename =
void>
19 struct explicit_invocable : std::false_type {};
21 template<
typename F,
typename... Args>
22 struct explicit_invocable<
23 F, type_sequence<Args...>,
26 std::declval<decltype( std::forward<F> (std::declval<F&&> ()) )>(),
27 std::declval<decltype( std::forward<Args>(std::declval<Args&&>()) )>()...
30 > : std::true_type {};
32 template<
typename F,
typename Seq>
33 struct invocable_impl : std::false_type {};
35 template<
typename F,
typename... Args>
36 struct invocable_impl<F, type_sequence<Args...>> : explicit_invocable<F, type_sequence<Args...>> {};
51 template<
typename F,
typename... Args>
52 struct invocable : detail::invocable_impl<F, type_sequence<Args...>> {};
63 template<
typename F,
typename... Args >
constexpr invoke_result_t< F, Args... > invoke(F &&f, Args &&... args) noexcept(is_nothrow_invocable< F, Args... >::value)
Definition: invoke.hpp:38
Definition: directory.h:12
specifies that a callable type can be invoked with a given set of argument types
Definition: invocable.hpp:52
specifies that a callable type can be invoked with a given set of argument types
Definition: invocable.hpp:64