diff --git a/include/beman/inplace_vector/inplace_vector.hpp b/include/beman/inplace_vector/inplace_vector.hpp index 4395f45..d499fc2 100644 --- a/include/beman/inplace_vector/inplace_vector.hpp +++ b/include/beman/inplace_vector/inplace_vector.hpp @@ -47,10 +47,10 @@ inline constexpr from_range_t from_range; // Smallest unsigned integer that can represent values in [0, N]. template using smallest_size_t -= std::conditional_t<(N < std::numeric_limits::max()), uint8_t, - std::conditional_t<(N < std::numeric_limits::max()), uint16_t, - std::conditional_t<(N < std::numeric_limits::max()), uint32_t, - std::conditional_t<(N < std::numeric_limits::max()), uint64_t, += std::conditional_t<(N <= std::numeric_limits::max()), uint8_t, + std::conditional_t<(N <= std::numeric_limits::max()), uint16_t, + std::conditional_t<(N <= std::numeric_limits::max()), uint32_t, + std::conditional_t<(N <= std::numeric_limits::max()), uint64_t, size_t>>>>; // clang-format on diff --git a/tests/beman/inplace_vector/size_n_data.test.cpp b/tests/beman/inplace_vector/size_n_data.test.cpp index a3595be..b3f66ae 100644 --- a/tests/beman/inplace_vector/size_n_data.test.cpp +++ b/tests/beman/inplace_vector/size_n_data.test.cpp @@ -1,9 +1,25 @@ #include #include +#include + #include "gtest_setup.hpp" namespace { +// details::smallest_size_t — smallest unsigned integer holding values in [0, N] +using beman::inplace_vector::details::smallest_size_t; +static_assert(std::is_same_v, uint8_t>); +static_assert(std::is_same_v, uint8_t>); +static_assert(std::is_same_v, uint16_t>); +static_assert(std::is_same_v, uint16_t>); +static_assert(std::is_same_v, uint32_t>); +static_assert(std::is_same_v< + smallest_size_t::max()>, uint32_t>); +static_assert( + std::is_same_v< + smallest_size_t::max()>, + uint64_t>); + // 23.3.14.3 Size and capacity [inplace.vector.capacity] template class SizeNCapacity : public IVBasicTest {};