Environnement: VS2005 C++ utilisant STLPort 5.1.4.La méthode std :: string insert a des surcharges ambiguës?
Compiler le code suivant:
std::string copied = "asdf";
char ch = 's';
copied.insert(0,1,ch);
Je reçois une erreur:
Error 1 error C2668: 'stlpx_std::basic_string<_CharT,_Traits,_Alloc>::insert' : ambiguous call to overloaded function
Il semble que le problème est l'appel de méthode d'insertion sur l'objet chaîne.
Les deux sont définis les surcharges
void insert (iterator p, size_t n, char c);
string& insert (size_t pos1, size_t n, char c);
Mais étant donné que STLPort utilise un simple char * comme iterator, le zéro littéral dans la méthode d'insertion dans mon code est ambigu.
Ainsi, alors que je peux facilement résoudre le problème en faisant allusion tels que
copied.insert(size_t(0),1,ch);
Ma question est la suivante: est-ce possible surcharge et de l'ambiguïté intentionnelle dans le cahier des charges? Ou plus probablement un effet secondaire involontaire de la mise en œuvre de STLPort spécifique?
(Notez que le TSL fourni par Microsoft n'a pas ce problème car il a une classe pour la iterator, au lieu d'un pointeur nu)
Pour être plus stricte: il devrait être 'copied.insert (static_cast (0), static_cast (1), ch)' –
ereOn
@ereOn: La deuxième 'static_cast' est inutile puisque les deux prennent une' surcharge size_t' comme deuxième paramètre. –
Non inutile en raison d'éventuelles surcharges futures et du type intégral incertain de '1'. – Marius