4#ifndef TETL_TYPE_TRAITS_IS_INVOCABLE_HPP
5#define TETL_TYPE_TRAITS_IS_INVOCABLE_HPP
7#include <etl/_type_traits/bool_constant.hpp>
8#include <etl/_type_traits/invoke_result.hpp>
9#include <etl/_type_traits/is_void.hpp>
10#include <etl/_type_traits/void_t.hpp>
16template <
typename Result,
typename Ret,
bool =
etl::is_void_v<Ret>,
typename =
void>
17struct is_invocable_impl :
etl::false_type { };
19template <
typename Result,
typename Ret>
20struct is_invocable_impl<Result, Ret,
true,
etl::void_t<
typename Result::type>> :
etl::true_type { };
23template <
typename Result,
typename Ret>
24struct is_invocable_impl<Result, Ret,
false,
etl::void_t<
typename Result::type>> {
25 static auto get_t() ->
typename Result::type;
27 static auto use_t(T ) ->
void;
28 template <
typename T,
typename =
decltype(use_t<T>(get_t()))>
29 static auto check_converts_to_t(
int ) ->
etl::true_type;
31 static auto check_converts_to_t(...) ->
etl::false_type;
32 using type =
decltype(check_converts_to_t<Ret>(1));
37template <
typename Fn,
typename... ArgTypes>
Definition adjacent_find.hpp:9
constexpr auto is_invocable_v
Definition is_invocable.hpp:41
Deduces the return type of an INVOKE expression at compile time.
Definition invoke_result.hpp:72
Definition is_invocable.hpp:38