Как получить повышенные типы двух операндов?
Это может быть полезно для такого кода:
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 должен быть ваш ответ:
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 выводится *
decltype(X)
X
* Таким образом, не произойдет «переполнения во время компиляции» или «поведения во время компиляции».