【发布时间】:2020-08-11 23:40:58
【问题描述】:
请看以下代码:
#include <type_traits>
int main()
{
using T = short;
auto x = T(1) + T(1);
static_assert(std::is_same_v<decltype(x), T>);
}
上面的static_assert 似乎对于所有 gcc、clang 和 msvc 都失败了,我不明白为什么。如果我将short 更改为bool、char、signed char、unsigned char 和unsigned short 中的任何一个,断言仍然失败,因为对于所有这些情况,decltype(x) 被推断为int .
考虑到https://en.cppreference.com/w/cpp/language/operator_arithmetic 中的解释,这是正确的行为吗?
【问题讨论】:
-
积分提升页面说明
short提升为int。 -
这可能是一个更好的链接:Integral promotions。两个操作数都至少提升为
int(或更大的类型或浮点类型)。
标签: c++ integer-promotion