template <class T> inline T ntoh(T t) { return hton(t); }
-template <class... Args, size_t... Indices> inline tuple<typename remove_reference<Args>::type...>
+template <class... Args, size_t... Indices>
+inline tuple<typename std::remove_reference<Args>::type...>
tuple_hton_imp(tuple<Args...> && t, tuple_indices<Indices...>) {
- return tuple<typename remove_reference<Args>::type...>(hton(get<Indices>(t))...);
+ return tuple<
+ typename std::remove_reference<Args>::type...
+ >(hton(std::get<Indices>(t))...);
}
-template <class... Args> inline tuple<typename remove_reference<Args>::type...>
+template <class... Args>
+inline tuple<typename std::remove_reference<Args>::type...>
hton(tuple<Args...> && t) {
- using Indices = typename make_tuple_indices<sizeof...(Args)>::type;
- return tuple_hton_imp(forward<tuple<Args...>>(t), Indices());
+ return tuple_hton_imp(std::forward<tuple<Args...>>(t), TUPLE_INDICES(Args));
}
-#define ENDIAN_SWAPPABLE(_c_) \
-inline _c_ hton(_c_ && t) { \
- _c_ result; \
- result._tuple_() = hton(t._tuple_()); \
- return result; \
+template <class T> inline typename
+enable_if<is_tuple_convertible<T>::value, T>::type
+hton(T && t) {
+ T result;
+ result._tuple_() = hton(t._tuple_());
+ return result;
}
#endif