-1

2つのオペランドのプロモートされたタイプを取得するにはどうすればよいですか?

これは、次のようなコードに役立つ場合があります。

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 に答える