-1

如何获得两个操作数的提升类型?

这可能对这样的代码有用:

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;
}
4

2 回答 2

2

common_type应该是你的答案:

#include <type_traits>

typedef std::common_type<LHS, RHS>::type ctype;
于 2012-10-01T15:53:54.460 回答
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派生的静态类型*


* 所以不会发生“编译时溢出”或“编译时未定义行为”

于 2012-10-01T15:07:13.600 回答