[cfe-dev] error with lambda function that results in endless loop
Ben Pope
benpope81 at gmail.com
Thu May 3 03:57:02 PDT 2012
On Thursday, May 03, 2012 05:53 PM, Ran Regev wrote:
>
> Colleagues,
>
> While working with some c++11 features I have encountered a problem with std::sort;
>> From some reason it was stuck when I tried to sort more than 10 elements.
>
> I simplified the code to use normal int, instead of my objects, and it gets stuck above 30 elements.
>
> Here is the code, followed by the compilation command line, followed by the output, followed by more information:
>
> 12:30:06/auto> cat sortproblem.cpp
>
> #include<iostream>
> #include<vector>
>
> void checkSort( std::vector<int>& v )
> {
> std::sort( v.begin(), v.end(),
> [] (const int& a1, const int& a2) -> bool
> {
> return true;
> }
> );
> }
> <snip>
> Surly returning true regardless of the value of the elements has no real meaning and can results in nonsense like a1<a2==true&& a2<a1==true
> And surly this is a bad idea to write code like this, but still - why it passes 30 and not 31?
This has nothing to do with lambdas.
You already know what the problem is, I'm not sure what you expect to
happen.
std::sort requires a strict weak ordering, always returning true does
not fulfill that criteria.
Have a look here:
http://cpp-next.com/archive/2010/02/order-i-say/
Checked versions of Microsoft’s standard library attempt to catch this
type of problem, you end up with an assert if I recall, but that's a QOI
issue.
Technically running your ill-defined program is allowed to do anything,
including getting stuck at 31 elements and appearing to work at 30.
Ben
More information about the cfe-dev
mailing list