24 #ifndef GRAPHLAB_HAS_LOAD_HPP
25 #define GRAPHLAB_HAS_LOAD_HPP
31 namespace archive_detail {
39 template<
typename ArcType,
typename T>
40 struct has_load_method
42 template<
typename U,
void (U::*)(ArcType&)>
struct SFINAE {};
43 template<
typename U>
static char Test(SFINAE<U, &U::load>*);
44 template<
typename U>
static int Test(...);
45 static const bool value =
sizeof(Test<T>(0)) ==
sizeof(char);
57 template <
typename ArcType,
typename ValueType>
58 typename boost::enable_if_c<has_load_method<ArcType, ValueType>::value,
void>::type
59 load_or_fail(ArcType& o, ValueType &t) {
72 template <
typename ArcType,
typename ValueType>
73 typename boost::disable_if_c<has_load_method<ArcType, ValueType>::value,
void>::type
74 load_or_fail(ArcType& o, ValueType &t) {
75 ASSERT_MSG(
false,
"Trying to deserializable type %s without valid load method.",
typeid(ValueType).name());