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; EType* ptr = null;
//Note: we use "min/max" to handle sign mismatch. //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); ptr = cast(EType*) memchr(haystack.ptr, needle, haystack.length);
return ptr ? return ptr ?
@ -4042,6 +4042,15 @@ unittest
dg(); dg();
assertCTFEable!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 Finds a forward range in another. Elements are compared for