En VC++ 2010, il existe trois surcharges de l'option std::to_string
en prenant long long
, unsigned long long
et long double
respectivement. Clairement, int
n'est rien de tout cela, et aucune conversion n'est meilleure qu'une autre ( Démonstration en ligne ), la conversion ne peut donc pas se faire de manière implicite/non ambiguë.
En ce qui concerne la prise en charge réelle de C++11, il s'agit d'une défaillance de l'implémentation de la bibliothèque standard de VC++ 2010. neuf surcharges de std::to_string
(§21.5) :
string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);
Si toutes ces surcharges avaient été présentes, il est évident que vous n'auriez pas ce problème. Bien sûr, VC++ 2010 n'était pas basé sur la norme C++11, qui n'existait pas encore à l'époque de sa sortie, mais plutôt sur la norme N3000, qui n'exigeait pas ces surcharges supplémentaires. Par conséquent, il est difficile de rejeter la faute sur VC++. trop beaucoup ici...
Dans tous les cas, il n'y a rien de mal à utiliser un casting pour résoudre soi-même l'ambiguïté :
void SentryManager::add(std::string& name, std::shared_ptr<Sentry>){
name += std::to_string(static_cast<long long>(counter));
}
0 votes
Pourriez-vous inclure le message d'erreur réel, ainsi que le compilateur et la version que vous utilisez (non reproductible avec GCC 4.5).