如何获得两个操作数的提升类型?
这可能对这样的代码有用:
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;
}
如何获得两个操作数的提升类型?
这可能对这样的代码有用:
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;
}
common_type
应该是你的答案:
#include <type_traits>
typedef std::common_type<LHS, RHS>::type ctype;
这实际上比人们想象的要简单:
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
派生的静态类型*
* 所以不会发生“编译时溢出”或“编译时未定义行为”