15#ifndef IOX2_BB_PRIMITIVES_TYPE_TRAITS_HPP
16#define IOX2_BB_PRIMITIVES_TYPE_TRAITS_HPP
27template <
typename T,
typename C>
31template <
typename T,
typename C>
38template <
typename T,
typename C>
50#if __cplusplus >= 201703L
51template <
typename C,
typename...
Cargs>
54template <
typename C,
typename...
Cargs>
64 template <
typename C,
typename...
As>
72 template <
typename C,
typename...
As>
90 template <
typename C,
typename...
As>
91 static constexpr std::true_type
98 template <
typename C,
typename...
As>
127template <
typename...>
148template <
class Arg,
class...
Args>
149struct conjunction<Arg,
Args...> : std::conditional_t<!bool(Arg::value), Arg, conjunction<Args...>> { };
158 using type_t = std::remove_cv_t<std::remove_reference_t<T>>;
175template <
typename From,
typename To>
179template <
typename Iter>
182template <
typename Iter,
typename T>
189template <
class From,
class To>
void void_t
Maps a sequence of any types to the type void.
std::result_of< C(Cargs...)> invoke_result
constexpr bool always_false_v
Helper value to bind a static_assert to a type.
decltype(*std::declval< Iter & >()) iter_reference_t
std::integral_constant< bool, B > bool_constant
Implementation C++17 bool_constant helper.
typename remove_cvref< T >::type_t remove_cvref_t
Implementation of C++20's std::remove_cvref_t.
constexpr bool is_convertible_v
Helper template from C++17.
std::is_convertible< From(*)[], To(*)[]> is_convertible_t
iox2::legacy::is_convertible_t< std::remove_reference_t< iter_reference_t< Iter > >, T > iter_has_convertible_ref_type_t
std::is_array< std::remove_reference_t< T > > is_c_array_t
typename add_const_conditionally< T, C >::type add_const_conditionally_t
Helper type for add_const_conditionally which adds const to type T if C has the const qualifier.
Conditionally add const to type T if C has the const qualifier.
Implementation of C++17 std::conjunction.
struct to check whether an argument is a char array
Check whether T is a function pointer with arbitrary signature.
Verifies whether the passed Callable type is in fact invocable with the given arguments and the resul...
static constexpr bool value
static constexpr std::true_type test(std::enable_if_t< std::is_convertible< typename iox2::legacy::invoke_result< C, As... >::type, ReturnType >::value > *) noexcept
static constexpr std::false_type test(...) noexcept
Verifies whether the passed Callable type is in fact invocable with the given arguments.
static constexpr std::true_type test(typename iox2::legacy::invoke_result< C, As... >::type *) noexcept
static constexpr bool value
static constexpr std::false_type test(...) noexcept
Implementation of C++17 negation.
Implementation of C++20's std::remove_cvref.
std::remove_cv_t< std::remove_reference_t< T > > type_t