#pragma once #include #include namespace detail { static constexpr auto cast_to_unsigned_integer_impl(bool b) { return b; } template static constexpr auto cast_to_unsigned_integer_impl(I n) { constexpr const auto min_value = std::numeric_limits::min(); return static_cast>(n ^ min_value); } } // namespace detail