Здравствуйте Павел Кузнецов, Вы писали:
ПК>Тут вы, батенька, поторопились :)
Эээ...
Есть маленько :shuffle:
Но все равно проблема стандартного STL не в отсутствии дополнительного "константного" шаблона, а в определении mem_fun1_ref_t:
template<class _R, class _Ty, class _A>
class mem_fun1_ref_t : public binary_function<_Ty * , _A, _R>
Тогда при использовании bind2nd, в
template<_Operation>
...
binder2nd::operator()(const typename _Operation::first_argument_type& __x) const
выражению _Operation::first_argument_type соответствует _Ty * , а for_each в качестве параметра передает объект типа _Ty
Вот это и есть причина ошибки.
Что касается приведенных Вами определений mem_fun1_ref и const_mem_fun1_ref — то здесь все нормально, но строка
for_each(v.begin(),v.end(),bind2nd(mem_fun1_ref( A::Func1 ),10) );
все равно не будет компилиться, если A::Func1 не объявлена с модификатором const.
Или есть биндер, у которого operator() объявлен так:
template<_Operation>
...
binder2nd::operator()(typename _Operation::first_argument_type& __x) const
???
Я пока ничего похожего не нашел...