Получить продвигаемый тип

Как получить повышенные типы двух операндов?

Это может быть полезно для такого кода:

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

-1

Решение

common_type должен быть ваш ответ:

#include <type_traits>

typedef std::common_type<LHS, RHS>::type ctype;
2

Другие решения

Это на самом деле проще, чем можно подумать:

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 выводится *


* Таким образом, не произойдет «переполнения во время компиляции» или «поведения во время компиляции».

0

По вопросам рекламы [email protected]