fix Issue 11603 - std.algorithm.canFind does not work when needle is 1-byte zero

This commit is contained in:
k-hara 2013-12-04 16:28:04 +09:00
parent ae34e224f8
commit ab34fb92ad

View file

@ -3916,7 +3916,7 @@ if (isInputRange!InputRange &&
{
EType* ptr = null;
//Note: we use "min/max" to handle sign mismatch.
if (min(EType.min, needle) == EType.min, needle && max(EType.max, needle) == EType.max)
if (min(EType.min, needle) == EType.min && max(EType.max, needle) == EType.max)
ptr = cast(EType*) memchr(haystack.ptr, needle, haystack.length);
return ptr ?
@ -4042,6 +4042,15 @@ unittest
dg();
assertCTFEable!dg;
}
unittest
{
// Bugzilla 11603
enum Foo : ubyte { A }
assert([Foo.A].find(Foo.A).empty == false);
ubyte x = 0;
assert([x].find(x).empty == false);
}
/**
Finds a forward range in another. Elements are compared for