18 #ifndef IOX_UTILS_CXX_TYPE_TRAITS_HPP
19 #define IOX_UTILS_CXX_TYPE_TRAITS_HPP
21 #include <type_traits>
32 template <
typename T,
typename C>
37 template <
typename T,
typename C>
45 template <
typename T,
typename C>
46 using add_const_conditionally_t =
typename add_const_conditionally<T, C>::type;
51 template <
typename Callable,
typename... ArgTypes>
56 template <
typename C,
typename... As>
57 static constexpr std::true_type
test(
typename std::result_of<C(As...)>::type*)
63 template <
typename C,
typename... As>
64 static constexpr std::false_type
test(...)
70 static constexpr
bool value = decltype(test<Callable, ArgTypes...>(
nullptr))::value;
76 template <
typename Callable =
void,
typename ReturnType =
void,
typename ArgTypes =
void>
81 template <
typename Callable,
typename ReturnType,
typename... ArgTypes>
83 ReturnType(ArgTypes...),
84 typename std::enable_if<
85 std::is_convertible<typename std::result_of<Callable(ArgTypes...)>::type, ReturnType>::value,
86 void>::type> : std::true_type
92 template <
typename...>
building block to easily create free function for logging in a library context
Definition: lockfree_queue.hpp:28
Conditionally add const to type T if C has the const qualifier.
Definition: type_traits.hpp:34
Verfies the signature ReturnType(ArgTypes...) of the provided Callable type.
Definition: type_traits.hpp:78
Verifies whether the passed Callable type is in fact invocable with the given arguments.
Definition: type_traits.hpp:53
static constexpr std::true_type test(typename std::result_of< C(As...)>::type *)
Definition: type_traits.hpp:57