1 #ifndef hamr_copier_traits_h
2 #define hamr_copier_traits_h
4 #include "hamr_config.h"
11 template <
typename T,
typename U,
bool val = (!std::is_arithmetic<T>::value || !std::is_arithmetic<U>::value)>
struct use_object_copier : std::false_type {};
13 template <
typename T,
typename U>
using use_object_copier_t =
typename std::enable_if<use_object_copier<T,U>::value>::type;
19 #if defined(HAMR_ENABLE_OBJECTS)
20 template <
typename T,
typename U,
bool val = (!std::is_same<T,U>::value)>
struct use_cons_copier : std::false_type {};
21 template <
typename T,
typename U>
struct use_cons_copier<T, U, true> : std::true_type {};
22 template <
typename T,
typename U>
using use_cons_copier_t =
typename std::enable_if<use_cons_copier<T,U>::value>::type;
24 template <
typename T,
typename U,
bool val = (!std::is_same<T,U>::value && std::is_arithmetic<T>::value)>
struct use_cons_copier : std::false_type {};
25 template <
typename T,
typename U>
struct use_cons_copier<T, U, true> : std::true_type {};
26 template <
typename T,
typename U>
using use_cons_copier_t =
typename std::enable_if<use_cons_copier<T,U>::value>::type;
32 template <
typename T,
typename U,
bool obj = (std::is_same<T,U>::value && std::is_arithmetic<T>::value)>
struct use_bytes_copier : std::false_type {};
33 template <
typename T,
typename U>
struct use_bytes_copier<T, U, true> : std::true_type {};
34 template <
typename T,
typename U>
using use_bytes_copier_t =
typename std::enable_if<use_bytes_copier<T,U>::value>::type;