Cela semble incohérent. J'ai 3 fonctions f
surchargé pour les types signés short
, int
et long long
. Si vous passez un unsigned short
, il est promu au prochain type signé le plus grand: int
. Cependant, si vous passez unsigned int
alors il n'est pas promu à long long
signé ce qui est ce que je m'attendais, plutôt compilateur se plaint de l'appel ambigu à la fonction surchargée.C++ appel ambigu à une fonction surchargée avec un entier non signé
void f(short x) { std::printf("f(short)\n"); }
void f(int x) { std::printf("f(int)\n"); }
void f(long long x) { std::printf("f(long long)\n"); }
int main()
{
f((unsigned short)0); // Fine: calls f(int)
// f((unsigned int)0); // Ambiguous: could be f(short), f(int) or f(long long)
}
Pourquoi vous attendriez-vous à cela et quelle est votre question? Pourquoi c'est comme ça? ou comment le rendre moins ambigu? – user463035818
Oui, quelle est la justification? –