Здравствуйте, MaximE, Вы писали:
ME>Почему же тогда не компилируется эта строчка?
ME>ME>std::bind1st(std::mem_fun_ref(SETTRADES::insert), trades)
ME>Как здесь появляется ссылка на ссылку?
template <class _Operation>
class binder1st <...>
{ <...>
typename _Operation::result_type
operator()(const typename _Operation::second_argument_type& __x) const // [[*]<...>
};
template <class _Operation, class _Tp>
binder1st<_Operation> bind1st(const _Operation& __fn, const _Tp& __x) <...>
Т.к. insert имеет прототип
pair <iterator, bool> insert(const value_type& _Val);
результатом std::mem_fun_ref(&SETTRADES::insert) является:
std::mem_fun1_ref_t<
std::pair<std::set<BasicTradeData*> >::iterator, bool>,
std::set<BasicTradeData *>,
const std::set<BasicTradeData *>::value_type &>
т.е., внутри шаблона binder1st typename _Operation::second_argument_type = const std::set<BasicTradeData *>::value_type
&. В результате добавления к этому (уже ссылочному) типу еще одной ссылки (в точке [*]) и получается ссылка на ссылку, что стандартом не допускается.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен