Clean-ups
[invirt/third/libt4.git] / endian.h
index 7385406..feb3bbd 100644 (file)
--- a/endian.h
+++ b/endian.h
@@ -20,22 +20,26 @@ inline int64_t hton(int64_t t) { return (int64_t)hton((uint64_t)t); }
 
 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