8 struct CountrZeroFunction {
9 template<concepts::Un
signedInteger T>
10 constexpr auto operator()(T value)
const ->
int {
15 if constexpr (
sizeof(T) <=
sizeof(
unsigned int)) {
16 return __builtin_ctz(value);
17 }
else if constexpr (
sizeof(T) <=
sizeof(
unsigned long)) {
18 return __builtin_ctzl(value);
19 }
else if constexpr (
sizeof(T) <=
sizeof(
unsigned long long)) {
20 return __builtin_ctzll(value);
22 static_assert(
sizeof(T) == 16);
23 auto low =
u64(value & math::NumericLimits<u64>::max);
27 auto high =
u64(value >> 64);
28 return (*
this)(high) + 64;
34constexpr inline auto countr_zero = detail::CountrZeroFunction {};
Definition bit_proxy_reference.h:5
constexpr auto countr_zero
Definition countr_zero.h:34
__UINT64_TYPE__ u64
Definition integers.h:12
Definition any_storable.h:9