This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.
Section: 28.5.4.4 [rand.eng.sub] Status: New Submitter: Jonathan Wakely Opened: 2022-11-02 Last modified: 2022-11-12
Priority: 3
View all other issues in [rand.eng.sub].
View all issues with New status.
Discussion:
The standard requires subtract_with_carry_engine<T> to use:
linear_congruential_engine<T, 40014u, 0u, 2147483563u>
where each of those values is converted to T.
This appears to mean subtract_with_carry_engine cannot be used with uint16_t, because 2147483563u cannot be converted to uint16_t without narrowing. What is the intention here? Should it be ill-formed? Should the seed engine be linear_congruential_engine<uint_least32_t, …> instead? The values from the linear_congruential_engine are used modulo 2^32 so getting 64-bit values from it is pointless, and getting 16-bit values from it doesn't compile.[Kona 2022-11-12; Set priority to 3]
Proposed resolution: