Ambiente: VS2005 C++ utilizzando STLPort 5.1.4.std :: metodo di inserimento stringa ha sovraccarichi ambigui?
compilazione del seguente frammento di codice:
std::string copied = "asdf";
char ch = 's';
copied.insert(0,1,ch);
visualizzato un errore:
Error 1 error C2668: 'stlpx_std::basic_string<_CharT,_Traits,_Alloc>::insert' : ambiguous call to overloaded function
Sembra che il problema è il metodo chiamata inserto sull'oggetto stringa.
I due overload definiti sono
void insert (iterator p, size_t n, char c);
string& insert (size_t pos1, size_t n, char c);
Ma dato che STLPort utilizza un semplice char * come iteratore, il letterale zero nel metodo di inserimento nel mio codice è ambigua.
Così, mentre io posso facilmente superare il problema da accennando come
copied.insert(size_t(0),1,ch);
La mia domanda è: è questo sovraccarico e possibili ambiguità intenzionale nella specifica? O più probabilmente un indesiderato effetto collaterale della specifica implementazione STLPort?
(Si noti che lo STL fornito da Microsoft non ha questo problema in quanto ha una classe per l'iteratore, al posto di un puntatore nudo)
Per essere più rigorosa: dovrebbe essere 'copied.insert (static_cast (0), static_cast (1), ch)' –
ereOn
@ereOn: Il secondo 'static_cast' non è necessaria dal momento che entrambi i sovraccarichi prendono un' size_t' come secondo parametro. –
Non necessario a causa di possibili sovraccarichi futuri e del tipo integrale incerto di "1". – Marius