diff --git a/bitwise.hpp b/bitwise.hpp index d3b5f016..ec31a78e 100644 --- a/bitwise.hpp +++ b/bitwise.hpp @@ -67,19 +67,29 @@ namespace cruft { /////////////////////////////////////////////////////////////////////////// - template < - typename T, - typename = std::enable_if_t< - std::is_integral_v - > - > - constexpr T - popcount (T t) + constexpr unsigned + popcount (unsigned t) { return __builtin_popcount (t); } + //------------------------------------------------------------------------- + constexpr unsigned long + popcount (unsigned long t) + { + return __builtin_popcountl (t); + } + + + //------------------------------------------------------------------------- + constexpr unsigned long long + popcount (unsigned long long t) + { + return __builtin_popcountll (t); + } + + /////////////////////////////////////////////////////////////////////////// /// returns the integral value composed of the bits from `val' in the /// inclusive range [lo, hi].