39 #include <boost/variant/variant.hpp>
40 #include <boost/variant/apply_visitor.hpp>
41 #include <boost/variant/static_visitor.hpp>
42 #include <boost/mpl/empty.hpp>
43 #include <boost/mpl/if.hpp>
44 #include <boost/mpl/front.hpp>
45 #include <boost/mpl/pop_front.hpp>
54 template <
class Archive,
class T>
63 template <
class Archive,
class Variant,
class TBegin,
class TEnd>
67 typedef typename boost::mpl::next<TBegin>::type
TNext;
77 ar.stream().setstate(std::ios::failbit);
91 template <
class Archive,
class Variant,
class TBegin>
98 ar.stream().setstate(std::ios::failbit);
104 template <
template <
bool>
class Archive, BOOST_VARIANT_ENUM_PARAMS(
typename T)>
109 typedef typename variant_type::types
types;
114 ar.read_variant_tag(t);
116 typename boost::mpl::begin<types>::type,
117 typename boost::mpl::end<types>::type>::read(ar, v, t))
119 ar.stream().setstate(std::ios::failbit);
127 template <
template <
bool>
class Archive, BOOST_VARIANT_ENUM_PARAMS(
typename T)>
133 struct visitor :
public boost::static_visitor<bool>
140 bool operator ()(
T &rv)
const
146 ar.stream().setstate(std::ios::failbit);
155 return boost::apply_visitor(visitor(ar), v);