Среда: VS2005 C ++ с использованием STLPort 5.1.4.
Компилирование следующего фрагмента кода:
std::string copied = "asdf";
char ch = 's';
copied.insert(0,1,ch);
Я получаю сообщение об ошибке:
Error 1 error C2668: 'stlpx_std::basic_string<_CharT,_Traits,_Alloc>::insert' : ambiguous call to overloaded function
Похоже, что проблема заключается в вызове метода вставки для строкового объекта.
Две определенные перегрузки:
void insert ( iterator p, size_t n, char c );
string& insert ( size_t pos1, size_t n, char c );
Но, учитывая, что STLPort использует простой символ * в качестве итератора, буквенный ноль в методе вставки в моем коде неоднозначен.
Так что пока я легко могу преодолеть проблему, намекнув , например
copied.insert(size_t(0),1,ch);
Мой вопрос: является ли эта перегрузка и возможная неоднозначность преднамеренной в спецификации? Или, скорее, непреднамеренный побочный эффект конкретной реализации STLPort?
(Обратите внимание, что поставляемый Microsoft STL не имеет этой проблемы, поскольку у него есть класс для итератора вместо голого указателя)