diff --git a/include/stdx/utility.hpp b/include/stdx/utility.hpp index b2a8875..d27c507 100644 --- a/include/stdx/utility.hpp +++ b/include/stdx/utility.hpp @@ -116,7 +116,7 @@ template if constexpr (sizeof(T) == sizeof(U)) { return sz; } else if constexpr (sizeof(T) > sizeof(U)) { - return (sz * sizeof(T) / sizeof(U)) + (sizeof(T) % sizeof(U) & 1u); + return (sz * sizeof(T) / sizeof(U)) + (sizeof(T) % sizeof(U) > 0); } else { return (sz * sizeof(T) + sizeof(U) - 1) / sizeof(U); } diff --git a/test/utility.cpp b/test/utility.cpp index f823f84..ef826e5 100644 --- a/test/utility.cpp +++ b/test/utility.cpp @@ -147,6 +147,18 @@ TEST_CASE("sized in (upsize not divisible)", "[utility]") { STATIC_REQUIRE(stdx::sized{3}.in() == 3); } +TEST_CASE("sized in (downsize, mod > 1)", "[utility]") { + using T = std::array; + using U = std::array; + STATIC_REQUIRE(stdx::sized{1}.in() == 2); +} + +TEST_CASE("sized in (upsize, mod > 1)", "[utility]") { + using T = std::array; + using U = std::array; + STATIC_REQUIRE(stdx::sized{2}.in() == 2); +} + TEST_CASE("CX_VALUE structural value", "[utility]") { auto x = CX_VALUE(42); STATIC_REQUIRE(x() == 42);