Hello,
Using g++ 4.8.1 (g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1) with boost
1.5.3, building the code below with
{{{
g++ -o example/filter.out -std=c++0x -Wall -g -rdynamic
-I/usr/include/boost example/filter.cpp
}}}
{{{
#include
<vector>
#include <string>
#include <iostream>
#include <functional>
#include
#include
using namespace std;
using namespace boost;
int main()
{
vector<string> ss{"hello", "world"};
// function fn = [](const string &s){return
false;};
function fn = [](const string &s){return
s.size() > 3;};
cout << fn("Hello") << endl; // (1)
cout << fn("world") << endl; // (2)
typedef
filter_iterator,
vector<string>::const_iterator>
filter_it_t;
auto r = make_iterator_range(filter_it_t(fn, ss.begin()),
filter_it_t(fn, ss.end()));
for(const string &a: r)
cout << a << endl;
return 0;
}
}}}
yields an executable that crashes with
{{{
Segmentation fault (core dumped)
}}}
Exchanging the comment in the two lines
{{{
// function fn = [](const string &s){return
false;};
function fn = [](const string &s){return
s.size() > 3;};
}}}
(so that the first lambda is used) yields an executable that hangs.
In either case, the application first prints the results of the lines
marked (1) and (2).
Can't figure out what I'm doing wrong, and would appreciate advice.
Thanks,
Ami