-#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;