29#if defined(ArithmeticConversionTraits_RECURSES)
30#error Recursive header files inclusion detected in ArithmeticConversionTraits.h
33#define ArithmeticConversionTraits_RECURSES
35#if !defined ArithmeticConversionTraits_h
37#define ArithmeticConversionTraits_h
42#include "DGtal/base/Common.h"
91 template <
typename T,
typename U,
typename Enable =
void>
100 template <
typename T,
typename U>
102 typename
std::enable_if<
103 ! std::is_same< T, typename std::remove_cv< typename std::remove_reference<T>::type >::type >::value
104 || ! std::is_same< U, typename std::remove_cv< typename std::remove_reference<U>::type >::type >::value >::type >
106 typename std::remove_cv< typename std::remove_reference<T>::type >::type,
107 typename std::remove_cv< typename std::remove_reference<U>::type >::type >
119 template <
typename T,
typename U>
121 && std::is_arithmetic<U>::value >
::type >
123 using type =
typename std::common_type<T, U>::type;
133 template <
typename T,
typename U>
143 template <
typename T,
typename U,
typename Enable =
void>
157 template <
typename T,
typename U>
159 typename
std::conditional<false, ArithmeticConversionType<T, U>, void>::type >
175 template <
typename LHS,
typename RHS,
typename... Args >
180 boost::ignore_unused_variable_warning(lhs);
181 boost::ignore_unused_variable_warning(rhs);
190 template <
typename T>
200 template <
typename U>
221#undef ArithmeticConversionTraits_RECURSES
DGtal is the top-level namespace which contains all DGtal functions and types.
ArithmeticConversionType< LHS, RHS > constructFromArithmeticConversion(LHS const &lhs, RHS const &rhs, Args &&... args)
Call constructor for the result type of an arithmetic operation.
boost::multiprecision::number< boost::multiprecision::cpp_int_backend<>, boost::multiprecision::et_off > BigInteger
typename ArithmeticConversionTraits< T, U >::type ArithmeticConversionType
Result type of arithmetic binary operators between two given types.
typename std::common_type< T, U >::type type
Aim: Trait class to get result type of arithmetic binary operators between two given types.
Helper to determine if an arithmetic operation between two given types has a valid result type (ie is...