Skip to content

Commit 82b6488

Browse files
committed
Add c++20 version of CountBits
1 parent 71709dc commit 82b6488

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/int_utils.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
#include <algorithm>
1515
#include <type_traits>
1616

17-
#ifdef _MSC_VER
17+
#if defined(__cpp_lib_int_pow2) && __cpp_lib_int_pow2 >= 202002L
18+
# include <bit>
19+
#elif defined(_MSC_VER)
1820
# include <intrin.h>
1921
#endif
2022

@@ -142,7 +144,11 @@ constexpr inline I Mask() { return ((I((I(-1)) << (std::numeric_limits<I>::digit
142144
/** Compute the smallest power of two that is larger than val. */
143145
template<typename I>
144146
static inline int CountBits(I val, int max) {
145-
#ifdef _MSC_VER
147+
#if defined(__cpp_lib_int_pow2) && __cpp_lib_int_pow2 >= 202002L
148+
// c++20 impl
149+
(void)max;
150+
return std::bit_width(val);
151+
#elif defined(_MSC_VER)
146152
(void)max;
147153
unsigned long index;
148154
unsigned char ret;

0 commit comments

Comments
 (0)