Почему common_type <long, unsigned long> :: type = long long?

common_type::type являетсяunsigned long потому что относительно операндов после интегрального продвижения стандарт говорит ...

[...] если операнд с целочисленным типом без знака имеет ранг, больший или равный рангу типа другого операнда, операнд с целочисленным типом со знаком должен быть преобразован в тип операнда с целочисленным типом без знака

Не называть интегральную систему продвижения ошибочной, но кажется, что если существует целочисленный тип со знаком большего размера, который может представлять диапазон как операндов со знаком, так и без знака, его следует использовать.

Я знаю, что некоторые платформы могут иметь long == long long, и в этом случае вышеуказанное правило может вступить в силу. Но если тамявляется больший подписанный целочисленный тип, не долженэто будет использоваться?

Ответы на вопрос(1)

Ваш ответ на вопрос