diff --git a/include/boost/random/detail/integer_log2.hpp b/include/boost/random/detail/integer_log2.hpp index f1d7ae0..e794509 100644 --- a/include/boost/random/detail/integer_log2.hpp +++ b/include/boost/random/detail/integer_log2.hpp @@ -22,9 +22,7 @@ namespace boost { namespace random { namespace detail { -// Daniel James: Disabled use of constexpr because integer_log2_impl is not a -// valid constexpr. -#if 0 && !defined(BOOST_NO_CONSTEXPR) +#if !defined(BOOST_NO_CONSTEXPR) #define BOOST_RANDOM_DETAIL_CONSTEXPR constexpr #elif defined(BOOST_MSVC) #define BOOST_RANDOM_DETAIL_CONSTEXPR __forceinline @@ -38,10 +36,11 @@ template struct integer_log2_impl { template - BOOST_RANDOM_DETAIL_CONSTEXPR static int apply(T t, int accum) + BOOST_RANDOM_DETAIL_CONSTEXPR static int apply(T t, int accum, + int update = 0) { - int update = ((t >> Shift) != 0) * Shift; - return integer_log2_impl::apply(t >> update, accum + update); + return update = ((t >> Shift) != 0) * Shift, + integer_log2_impl::apply(t >> update, accum + update); } };