获得推广类型

时间:2012-10-01 15:07:14

标签: c++ template-meta-programming

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

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

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

2 个答案:

答案 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的静态类型派生 *


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