constexpr T constexpr_log2(T a, T e) {
return e == T(1) ? a : constexpr_log2(a + T(1), e / T(2));
}
+
+template <typename T>
+constexpr T constexpr_log2_ceil(T l2, T t) {
+ return l2 + T(T(1) << l2 < t ? 1 : 0);
+}
} // namespace detail
template <typename T>
return detail::constexpr_log2(T(0), t);
}
+template <typename T>
+constexpr T constexpr_log2_ceil(T t) {
+ return detail::constexpr_log2_ceil(constexpr_log2(t), t);
+}
+
template <typename T>
constexpr T constexpr_ceil(T t, T round) {
return round == T(0)