Description
Several unit tests make use of std::uniform_int_distribution<>
, which has the following requirement for its type parameter:
IntType
– The result type generated by the generator. The effect is undefined if this is not one ofshort
,int
,long
,long long
,unsigned short
,unsigned int
,unsigned long
, orunsigned long long
.
In aarith's test suite there are several instances where std::uniform_int_distribution<>
is indirectly instantiated with std::uint8_t
, which is unsigned char
on most platforms, and hence not supported as a parameter type for std::uniform_int_distribution<>
:
- /tests/core/word_array-generation-test.cpp
- /tests/integer/uint-random-generation-test.cpp
- tests/test-signature-ranges.hpp (
AARITH_INT_TEST_TEMPLATE_PARAM_RANGE
andAARITH_WORD_ARRAY_TEST_TEMPLATE_PARAM_RANGE
) - ...
Although uint16_t
, uint32_t
, uint64_t
are usually identified with one of unsigned short
, unsigned int
, unsigned long
, or unsigned long long
, this is not guaranteed by the standard. It would probably be better not to use sized integer types for std::uniform_int_distribution<>
and to stick with the explicitly supported types instead.
Repro: try to build aarith on Windows with MSVC or Clang. Microsoft's STL has a static_assert()
enforcing above requirement.