Это кажется непоследовательным. У меня есть 3 функции f
, перегруженные для подписанных типов short
, int
и long long
. Если вы передадите unsigned short
, то он будет повышен до следующего крупнейшего подписанного типа int
. Однако, если вы передадите unsigned int
, то он не будет повышен до подписанного long long
, чего я и ожидал, скорее компилятор жалуется на неоднозначный вызов перегруженной функции.
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)
}