1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #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/variant/static_visitor.hpp>
- namespace boost {
- template <class CharT, class Trait, typename... U>
- inline std::basic_ostream<CharT, Trait>& operator<<(
- std::basic_ostream<CharT, Trait>& out, const variant<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 <class CharT, class Trait, typename... U>
- inline std::basic_ostream<CharT, Trait>& operator<<(
- std::basic_ostream<CharT, Trait>& out, const variant<U...>& rhs
- )
- {
- detail::variant::printer<
- std::basic_ostream<CharT, Trait>
- > visitor(out);
- rhs.apply_visitor(visitor);
- return out;
- }
- }
- #endif
|