[Issue 13067] New: @safe std.algorithm.findSplitBefore
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Mon Jul 7 03:10:54 PDT 2014
https://issues.dlang.org/show_bug.cgi?id=13067
Issue ID: 13067
Summary: @safe std.algorithm.findSplitBefore
Product: D
Version: D2
Hardware: x86
OS: Windows
Status: NEW
Severity: enhancement
Priority: P1
Component: Phobos
Assignee: nobody at puremagic.com
Reporter: bearophile_hugs at eml.cc
I am not sure if this enhancement is possible.
void main() @safe {
import std.algorithm: findSplitBefore;
auto txt = "just testing";
const part = txt.findSplitBefore(" ")[0];
assert(part == "just");
}
dmd 2.066beta1 gives:
test.d(4,37): Error: safe function 'D main' cannot call system function
'std.algorithm.findSplitBefore!("a == b", string, string).findSplitBefore'
To look for the cause, I've seen that findSplitBefore calls std.algorithm.find,
and one of the oveloads of find contains unsafe code (the cast(Representation)
):
R1 find(alias pred = "a == b", R1, R2)(R1 haystack, R2 needle) @safe
if (isForwardRange!R1 && isForwardRange!R2
&& is(typeof(binaryFun!pred(haystack.front, needle.front)) : bool)
&& !isRandomAccessRange!R1)
{
...
alias Representation =
Select!(haystack[0].sizeof == 1, ubyte[],
Select!(haystack[0].sizeof == 2, ushort[], uint[]));
// Will use the array specialization
return cast(R1) .find!(pred, Representation, Representation)
(cast(Representation) haystack, cast(Representation) needle);
...
--
More information about the Digitalmars-d-bugs
mailing list