Fix Issue 18166 - std.array.replace should be usable in @safe for dstrings

This commit is contained in:
Jack Stouffer 2018-03-09 14:21:06 -05:00
parent 9194efbf4d
commit 13cf12dfda

View file

@ -2268,7 +2268,14 @@ if (isInputRange!Range &&
copy(stuff, retval[from .. from + stuff.length]);
retval[from + stuff.length .. $] = subject[to .. $];
return cast(T[]) retval;
static if (is(T == const) || is(T == immutable))
{
return () @trusted { return cast(T[]) retval; } ();
}
else
{
return cast(T[]) retval;
}
}
else
{
@ -2362,6 +2369,13 @@ if (isInputRange!Range &&
assert(replace(d, 5, 10, "⁴³²¹⁰"d) == "⁰¹²³⁴⁴³²¹⁰"d);
}
// Issue 18166
@safe pure unittest
{
auto str = replace("aaaaa"d, 1, 4, "***"d);
assert(str == "a***a");
}
/++
Replaces elements from `array` with indices ranging from `from`
(inclusive) to `to` (exclusive) with the range `stuff`. Expands or