Стандарт (1998) гласит, что std::back_insert_iterator
необходимо Container::const_reference
. В «24.4.2.1 Шаблонный класс back_insert_iterator», [lib.back.insert.iterator], написано:
back_insert_iterator<Container>&
operator=(typename Container::const_reference value);
Стандарт 2011 хочет только Container::value_type
,
back_insert_iterator<Container>&
operator=(const typename Container::value_type& value);
back_insert_iterator<Container>&
operator=(typename Container::value_type&& value);
Итак, чтобы быть совместимым с обеими версиями стандарта C ++, определите как value_type
, так и const_reference_type
.
В GCC 4.4.6 и 4.5.1 определение operator=
идентично (libstdc++-v3/include/bits/stl_iterator.h
):
back_insert_iterator&
operator=(typename _Container::const_reference __value)
{
container->push_back(__value);
return *this;
}
и я получаю одинаковую ошибку с обоими компиляторами, возможно, вам придется перепроверить, используете ли вы правильные версии компилятора.