www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Type inference + forwarding lambda predicate

reply Jacob Carlborg <doob me.com> writes:
The following code results in a Segmentation fault: 11. The reason seems 
to be because "any" is called indefinitely. But if I don't use type 
inference for the lambda it works correctly.

import algorithm = std.algorithm;

bool any (alias predicate, Range) (Range range)
{
     return algorithm.any!(predicate)(range);
}

void main ()
{
     auto arr = ["foo"];
     any!(e => e == "asd")(arr); // segfault
     // any!((string e) => e == "asd")(arr); // works
}

Am I doing something wrong or is this a bug?

-- 
/Jacob Carlborg
Jan 04 2013
parent "Maxim Fomin" <maxim maxim-fomin.ru> writes:
On Friday, 4 January 2013 at 16:06:38 UTC, Jacob Carlborg wrote:
 The following code results in a Segmentation fault: 11. The 
 reason seems to be because "any" is called indefinitely. But if 
 I don't use type inference for the lambda it works correctly.

 import algorithm = std.algorithm;

 bool any (alias predicate, Range) (Range range)
 {
     return algorithm.any!(predicate)(range);
 }

 void main ()
 {
     auto arr = ["foo"];
     any!(e => e == "asd")(arr); // segfault
     // any!((string e) => e == "asd")(arr); // works
 }

 Am I doing something wrong or is this a bug?
Seems to be a lambda bug. Take a look at http://d.puremagic.com/issues/show_bug.cgi?id=8774 especially last Walter's comments. He has fixed many similar issues but there are still some problems. This appears to be another one.
Jan 04 2013