better operator handling

[SVN r36126]
This commit is contained in:
Joel de Guzman
2006-11-21 02:01:13 +00:00
parent 1b7f4a1a47
commit 4f14542256
9 changed files with 182 additions and 83 deletions

View File

@ -12,23 +12,32 @@
#include <istream>
#include <boost/fusion/sequence/io/detail/in.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/or.hpp>
#include <boost/fusion/support/sequence_base.hpp>
namespace boost { namespace fusion
{
template <typename Sequence>
inline typename
enable_if<
fusion::traits::is_sequence<Sequence>
, std::istream&
>::type
operator>>(std::istream& is, Sequence& seq)
inline std::istream&
in(std::istream& is, Sequence& seq)
{
detail::read_sequence(is, seq);
return is;
}
namespace operators
{
template <typename Sequence>
inline typename
enable_if<
fusion::traits::is_sequence<Sequence>
, std::istream&
>::type
operator>>(std::istream& is, Sequence& seq)
{
return fusion::in(is, seq);
}
}
using operators::operator>>;
}}
#endif

View File

@ -19,16 +19,27 @@
namespace boost { namespace fusion
{
template <typename Sequence>
inline typename
enable_if<
fusion::traits::is_sequence<Sequence>
, std::ostream&
>::type
operator<<(std::ostream& os, Sequence const& seq)
inline std::ostream&
out(std::ostream& os, Sequence& seq)
{
detail::print_sequence(os, seq);
return os;
}
namespace operators
{
template <typename Sequence>
inline typename
enable_if<
fusion::traits::is_sequence<Sequence>
, std::ostream&
>::type
operator<<(std::ostream& os, Sequence const& seq)
{
return fusion::out(os, seq);
}
}
using operators::operator<<;
}}
#endif