如何获得两个操作数的提升类型?
这对于这样的代码可能很有用:
template <typename LHS, typename RHS>
bool would_overflow_upon_addition (LHS lhs, RHS rhs) {
return lhs > std::numeric_limits<promoted<LHS,RHS>::type>::max()-rhs;
}
答案 0 :(得分:2)
common_type
应该是你的答案:
#include <type_traits>
typedef std::common_type<LHS, RHS>::type ctype;
答案 1 :(得分:0)
这实际上比人们想象的更简单:
template <typename LHS, typename RHS>
bool would_overflow_upon_addition (LHS lhs, RHS rhs) {
return lhs > std::numeric_limits<decltype(lhs+rhs)>::max()-rhs;
}
decltype(X)
未评估,只有X
的静态类型派生 *
*所以不会发生“编译时溢出”或“编译时未定义行为”