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
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 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