21 #ifndef OtbNumericTraits_h
22 #define OtbNumericTraits_h
26 #include <type_traits>
32 template <
typename I,
typename O>
34 using C = std::common_type_t<I,O>;
36 std::is_unsigned<I>::value ? I{}
37 : std::is_unsigned<O>::value ? O{}
39 static_cast<C
>(std::numeric_limits<I>::lowest()),
40 static_cast<C
>(std::numeric_limits<O>::lowest())
44 template <
typename I,
typename O>
46 using C = std::common_type_t<I,O>;
48 static_cast<C
>(std::numeric_limits<I>::max()),
49 static_cast<C
>(std::numeric_limits<O>::max()));
54 #endif // OtbNumericTraits_h