Hi all,
I meet a problem with some code with boost and want to ask for some help here.
To the following code:
#include <list>
using namespace std;
#include "boost/function.hpp"
#include "boost/foreach.hpp"
#include "boost/bind.hpp"
using namespace boost;
void InsertItemHelper(list<int>& inContainer, list<int>::iterator& ioPosition, const list<int>::value_type& inItem)
{
ioPosition = inContainer.insert(ioPosition, inItem);
}
void WorkerFunction(const list<int>& inContainer, boost::function<void(int)> const& inAddItemCallback)
{
BOOST_FOREACH(auto item, inContainer)
{
inAddItemCallback(item);
}
}
void Print(const list<int>& inContainer)
{
BOOST_FOREACH(auto item, inContainer)
{
std::cout << item << endl;
}
}
int main()
{
list<int> sourceContainer;
sourceContainer.push_back(1);
sourceContainer.push_back(2);
sourceContainer.push_back(3);
list<int> targetContainer;
list<int>::iterator pos = targetContainer.end();
boost::function<void(int)> addItemCallbackFxn(boost::bind(&InsertItemHelper, targetContainer, pos, _1));
WorkerFunction(sourceContainer, addItemCallbackFxn);
return 0;
}
When I run it on Windows with VS2012, I always get a “list insert iterator outside range” error with:
inContainer.insert(ioPosition, inItem);
It seems targetContainer I passed to boost::bind is copied so that the following debug error of STL is hit:
#if _HAS_ITERATOR_DEBUGGING
if
(_Where._Mycont != this)
_DEBUG_ERROR("list insert iterator outside
range");
#endif
/* _HAS_ITERATOR_DEBUGGING */
But I am passing targetContainer as a reference and after the error, I can correctly get data in it.
Does anybody know what’s wrong behind?
Thanks,
BD