copy_if を、イテレータのペアを受け入れる関数オブジェクトにバインドしています。ローカル アドレスまたは一時アドレスを返しているという警告が表示されます。
私はそれが std::pair のメンバー変数をバインドすることから来ていることを知っているところまで来ましたが、それを修正する方法がわかりません。そもそもなぜそれらが一時的と見なされるのか理解できません。誰かが私に両方を説明できますか?
関連するコードは次のとおりです。環境は Visual Studio 2010 Ultimate で、あまり役に立たない Windows 7 Enterprise です。
std::vector<My_Type *> destination_container;
typedef /*A boost multi index iterator that dereferences to a 'My_Type *' */ t_range_iterator;
typedef std::pair<t_range_iterator, t_range_iterator> t_equal_range;
typedef std::function<bool(My_Type *)> t_predicate;
typedef std::back_insert_iterator<std::vector<My_Type *>> t_inserter;
t_predicate predicate(std::bind(&My_Type::pred, std::placeholders::_1, SOME_CONST));
std::function<t_inserter(const t_equal_range)> do_copy_from(std::bind(&std::copy_if<t_range_iterator, t_inserter, t_predicate>
, std::bind(&t_equal_range::first, std::placeholders::_1)
, std::bind(&t_equal_range::second, std::placeholders::_1)
, std::back_inserter(destination_container)
, predicate));
その後、コードは次のようになります。
do_copy_from(return_me_an_equal_range_of_My_Type_ptr());
do_copy_from(get_me_another_equal_range());
do_copy_from(and_so_on_dot_dot_dot());