50using remove_cvref_t = std::remove_cv_t<std::remove_reference_t<T>>;
56using plain_ref_t = std::remove_cv_t<T>&;
61template<
class T> plain_ref_t<T> decl_plain_ref();
66template<
class T,
class=
void>
67struct get_is_bitwise : std::false_type {};
76 decltype(decl_plain_ref<T>() = std::declval<T>() | std::declval<T>()),
77 decltype(decl_plain_ref<T>() = std::declval<T>() & std::declval<T>()),
78 decltype(decl_plain_ref<T>() = std::declval<T>() ^ std::declval<T>()),
79 decltype(decl_plain_ref<T>() = ~ std::declval<T>())
82 :
public std::true_type {};
96static constexpr bool is_bitwise = get_is_bitwise<T>::value;
104template<
class T,
class R=T>
using uint_only = std::enable_if_t<
105 std::numeric_limits<T>::is_integer
106 && ( ! std::numeric_limits<T>::is_signed ),
118 std::numeric_limits<T>::is_integer
119 && ( ! std::numeric_limits<T>::is_signed )
120 && std::numeric_limits<T>::is_modulo
121 && std::is_arithmetic_v<T>,
141 std::numeric_limits<T>::is_integer
142 && ( ! std::numeric_limits<T>::is_signed )
143 && ( std::numeric_limits<T>::radix == 2 )
144 && std::numeric_limits<T>::is_modulo
145 && std::is_arithmetic_v<T>
157template<
class T,
class R=T>
using int_only = std::enable_if_t<
158 std::numeric_limits<T>::is_integer,
std::enable_if_t< std::numeric_limits< T >::is_integer &&(! std::numeric_limits< T >::is_signed), R > uint_only
Resolves to R if T is an unsigned integer.
Definition sfinae_helpers.hpp:104
std::enable_if_t< std::numeric_limits< T >::is_integer &&(! std::numeric_limits< T >::is_signed) &&(std::numeric_limits< T >::radix==2) &&std::numeric_limits< T >::is_modulo &&std::is_arithmetic_v< T > &&is_bitwise< T >, R > bitwise_uint_only
Definition sfinae_helpers.hpp:140
std::enable_if_t< std::numeric_limits< T >::is_integer, R > int_only
Definition sfinae_helpers.hpp:157
std::enable_if_t< std::numeric_limits< T >::is_integer &&(! std::numeric_limits< T >::is_signed) &&std::numeric_limits< T >::is_modulo &&std::is_arithmetic_v< T >, R > modulo_uint_only
Resolves to R if T is an unsigned integer with modulo arithmetic.
Definition sfinae_helpers.hpp:117