Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMartin Hořeňovský2024-04-03 12:29:51 +0200
committerMartin Hořeňovský2024-04-03 13:27:10 +0200
commitf181de9df4c43f188ae932a412af32a0981c9067 (patch)
tree873584749ace324b7c3e433c7ff8807ee4ef0330
parent9271083a0493fe24a56efadcef4c3d640c5dbcad (diff)
downloadcatch3-f181de9df4c43f188ae932a412af32a0981c9067.tar.gz
Use SizedUnsignedType_t to pick UnsignedType for uniform_integer_distribution
The previously used `make_unsigned` approach combined with the overload set of `extendedMult` caused compilation issues on MacOS platform. By forcing the selection to be one of `std::uintX_t` types we don't need to complicate the overload set further.
-rw-r--r--src/catch2/internal/catch_uniform_integer_distribution.hpp18
-rw-r--r--tests/SelfTest/IntrospectiveTests/RandomNumberGeneration.tests.cpp4
2 files changed, 4 insertions, 18 deletions
diff --git a/src/catch2/internal/catch_uniform_integer_distribution.hpp b/src/catch2/internal/catch_uniform_integer_distribution.hpp
index afa2015d..3332489a 100644
--- a/src/catch2/internal/catch_uniform_integer_distribution.hpp
+++ b/src/catch2/internal/catch_uniform_integer_distribution.hpp
@@ -13,22 +13,6 @@
namespace Catch {
- namespace Detail {
- // Indirection to enable make_unsigned<bool> behaviour.
- template <typename T>
- struct make_unsigned {
- using type = std::make_unsigned_t<T>;
- };
-
- template <>
- struct make_unsigned<bool> {
- using type = uint8_t;
- };
-
- template <typename T>
- using make_unsigned_t = typename make_unsigned<T>::type;
- }
-
/**
* Implementation of uniform distribution on integers.
*
@@ -44,7 +28,7 @@ template <typename IntegerType>
class uniform_integer_distribution {
static_assert(std::is_integral<IntegerType>::value, "...");
- using UnsignedIntegerType = Detail::make_unsigned_t<IntegerType>;
+ using UnsignedIntegerType = Detail::SizedUnsignedType_t<sizeof(IntegerType)>;
// Only the left bound is stored, and we store it converted to its
// unsigned image. This avoids having to do the conversions inside
diff --git a/tests/SelfTest/IntrospectiveTests/RandomNumberGeneration.tests.cpp b/tests/SelfTest/IntrospectiveTests/RandomNumberGeneration.tests.cpp
index 8517d617..327b65ee 100644
--- a/tests/SelfTest/IntrospectiveTests/RandomNumberGeneration.tests.cpp
+++ b/tests/SelfTest/IntrospectiveTests/RandomNumberGeneration.tests.cpp
@@ -140,7 +140,9 @@ TEMPLATE_TEST_CASE( "uniform_integer_distribution can handle unit ranges",
uint32_t,
int32_t,
uint64_t,
- int64_t ) {
+ int64_t,
+ size_t,
+ ptrdiff_t) {
// We want random seed to sample different parts of the rng state,
// the output is predetermined anyway
std::random_device rd;