8000 `std::uniform_int_distribution<>` is not defined for `unsigned char` · Issue #2 · keszocze/aarith · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
std::uniform_int_distribution<> is not defined for unsigned char #2
Open
@mbeutel

Description

@mbeutel

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 of short, int, long, long long, unsigned short, unsigned int, unsigned long, or unsigned 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 and AARITH_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.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0