mirror of
https://github.com/dlang/phobos.git
synced 2025-05-01 23:50:31 +03:00
Revert fix for 18631.
The fix for 18631 broke code. Ranges cannot be marked with const or inout in generic code. The range API does not require that any functions be const or inout. In this case, with the changes, choice requires that length and opSlice be const, breaking any code that uses a range with choice that does not have a const length or opSlice (which is going to be a large percentage of ranges with those functions which aren't arrays).
This commit is contained in:
parent
b87d28f2c7
commit
5d6d784c9a
1 changed files with 1 additions and 9 deletions
10
std/random.d
10
std/random.d
|
@ -2072,8 +2072,7 @@ Returns:
|
|||
return a `ref` to the $(D range element), otherwise it will return
|
||||
a copy.
|
||||
*/
|
||||
auto ref inout(ElementType!Range) choice(Range, RandomGen = Random)(inout auto ref Range range,
|
||||
ref RandomGen urng)
|
||||
auto ref choice(Range, RandomGen = Random)(auto ref Range range, ref RandomGen urng)
|
||||
if (isRandomAccessRange!Range && hasLength!Range && isUniformRNG!RandomGen)
|
||||
{
|
||||
assert(range.length > 0,
|
||||
|
@ -2110,13 +2109,6 @@ auto ref choice(Range)(auto ref Range range)
|
|||
"Choice did not return a valid element from the given Range");
|
||||
}
|
||||
|
||||
@safe unittest // issue 18631
|
||||
{
|
||||
const a = [0,1,2];
|
||||
auto r = choice(a);
|
||||
auto s = choice(cast(const)[0,1,2]);
|
||||
}
|
||||
|
||||
@safe unittest
|
||||
{
|
||||
import std.algorithm.searching : canFind;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue