From b5ca2ef0c9742c89a587d476848e0f34df2a4f9e Mon Sep 17 00:00:00 2001 From: Denis Shelomovskij Date: Wed, 27 Feb 2013 17:56:56 +0400 Subject: [PATCH] Add Issue 9578 workaround to `std.algorithm.all` As a result `all` can now be used with nested predicates. Issue URL: http://d.puremagic.com/issues/show_bug.cgi?id=9578 --- std/algorithm.d | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/std/algorithm.d b/std/algorithm.d index 547619637..e23fad7f4 100644 --- a/std/algorithm.d +++ b/std/algorithm.d @@ -9838,13 +9838,18 @@ assert(!all!"a & 1"([1, 2, 3, 5, 7, 9])); bool all(alias pred, R)(R range) if (isInputRange!R && is(typeof(unaryFun!pred(range.front)))) { - return find!(not!(unaryFun!pred))(range).empty; + // dmd @@@BUG9578@@@ workaround + // return find!(not!(unaryFun!pred))(range).empty; + bool notPred(ElementType!R a) { return !unaryFun!pred(a); } + return find!notPred(range).empty; } unittest { assert(all!"a & 1"([1, 3, 5, 7, 9])); assert(!all!"a & 1"([1, 2, 3, 5, 7, 9])); + int x = 1; + assert(all!(a => a > x)([2, 3])); } // Deprecated. It will be removed in January 2013. Use std.range.SortedRange.canFind.