1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #ifndef BOOST_VARIANT_DETAIL_VARIANT_IO_HPP
- #define BOOST_VARIANT_DETAIL_VARIANT_IO_HPP
- #include <iosfwd> // for std::basic_ostream forward declare
- #include <boost/variant/variant_fwd.hpp>
- #include <boost/detail/templated_streams.hpp>
- #include <boost/variant/static_visitor.hpp>
- namespace boost {
- template <
- BOOST_TEMPLATED_STREAM_ARGS(E,T)
- BOOST_TEMPLATED_STREAM_COMMA
- BOOST_VARIANT_ENUM_PARAMS(typename U)
- >
- inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<(
- BOOST_TEMPLATED_STREAM(ostream, E,T)& out
- , const variant< BOOST_VARIANT_ENUM_PARAMS(U) >& rhs
- );
- namespace detail { namespace variant {
- template <typename OStream>
- class printer
- : public boost::static_visitor<>
- {
- private:
- OStream& out_;
- public:
- explicit printer(OStream& out)
- : out_( out )
- {
- }
- public:
- template <typename T>
- void operator()(const T& operand) const
- {
- out_ << operand;
- }
- private:
- printer& operator=(const printer&);
- };
- }}
- template <
- BOOST_TEMPLATED_STREAM_ARGS(E,T)
- BOOST_TEMPLATED_STREAM_COMMA
- BOOST_VARIANT_ENUM_PARAMS(typename U)
- >
- inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<(
- BOOST_TEMPLATED_STREAM(ostream, E,T)& out
- , const variant< BOOST_VARIANT_ENUM_PARAMS(U) >& rhs
- )
- {
- detail::variant::printer<
- BOOST_TEMPLATED_STREAM(ostream, E,T)
- > visitor(out);
- rhs.apply_visitor(visitor);
- return out;
- }
- }
- #endif
|