Created on 2018-08-09.00:00:00 last changed 46 months ago
Proposed resolution:
This wording is relative to N4849.
Modify [rand.req.urng] as follows:
1 A uniform random bit generator g of type G is a function object returning unsigned integer values such that each value in the range of possible results has (ideally) equal probability of being returned. [Note: The degree to which g's results approximate the ideal is often determined statistically.—end note]
template<class G> concept uniform_random_bit_generator = invocable<G&> && unsigned_integral<invoke_result_t<G&>> && requires { { G::min() } -> same_as<invoke_result_t<G&>>; { G::max() } -> same_as<invoke_result_t<G&>>; requires bool_constant<(G::min() < G::max())>::value; };-2- Let g be an object of type G. G models uniform_random_bit_generator only if
(2.1) — both G::min() and G::max() are constant expressions ([expr.const]),
(2.2) — G::min() < G::max(),(2.3) — G::min() <= g(),
(2.4) — g() <= G::max(), and
(2.5) — g() has amortized constant complexity.
3 A class G meets the uniform random bit generator requirements if G models uniform_random_bit_generator, invoke_result_t<G&> is an unsigned integer type ([basic.fundamental]), and G provides a nested typedef-name result_type that denotes the same type as invoke_result_t<G&>.
[ 2020-02 Status to Immediate on Thursday night in Prague. ]
[ 2020-02-13; Prague ]
LWG provided some improved wording.
[ 2018-08-20 Priority set to 3 after reflector discussion ]
Previous resolution [SUPERSEDED]:This wording is relative to N4791.
Modify [rand.req.urng] as follows:
1 A uniform random bit generator g of type G is a function object returning unsigned integer values such that each value in the range of possible results has (ideally) equal probability of being returned. [Note: The degree to which g's results approximate the ideal is often determined statistically.—end note]
template<auto> struct require-constant; // exposition-only template<class G> concept UniformRandomBitGenerator = Invocable<G&> && UnsignedIntegral<invoke_result_t<G&>> && requires { { G::min() } -> Same<invoke_result_t<G&>>; { G::max() } -> Same<invoke_result_t<G&>>; typename require-constant<G::min()>; typename require-constant<G::max()>; requires G::min() < G::max(); };2 Let g be an object of type G. G models UniformRandomBitGenerator only if
(2.1) — both G::min() and G::max() are constant expressions ([expr.const]),
(2.2) — G::min() < G::max(),(2.3) — G::min() <= g(),
(2.4) — g() <= G::max(), and
(2.5) — g() has amortized constant complexity.
3 A class G meets the uniform random bit generator requirements if G models UniformRandomBitGenerator, invoke_result_t<G&> is an unsigned integer type ([basic.fundamental]), and G provides a nested typedef-name result_type that denotes the same type as invoke_result_t<G&>.
[rand.req.urng] paragraph 2 specifies axioms for the UniformRandomBitGenerator concept:
2 Let g be an object of type G. G models UniformRandomBitGenerator only if
(2.1) — both G::min() and G::max() are constant expressions ([expr.const]),
(2.2) — G::min() < G::max(),
(2.3) — G::min() <= g(),
(2.4) — g() <= G::max(), and
(2.5) — g() has amortized constant complexity.
Bullets 2.1 and 2.2 are both compile-time requirements that ought to be validated by the concept.
History | |||
---|---|---|---|
Date | User | Action | Args |
2021-02-25 10:48:01 | admin | set | status: wp -> c++20 |
2020-02-24 16:02:59 | admin | set | status: immediate -> wp |
2020-02-14 15:01:42 | admin | set | messages: + msg11125 |
2020-02-14 15:01:42 | admin | set | status: new -> immediate |
2020-02-13 20:13:47 | admin | set | messages: + msg11084 |
2018-08-20 12:41:52 | admin | set | messages: + msg10079 |
2018-08-09 00:00:00 | admin | create | |
2018-08-08 23:43:13 | admin | set | messages: + msg10055 |