Tweaks for xpressive

[SVN r34928]
This commit is contained in:
Joel de Guzman
2006-08-23 02:37:18 +00:00
parent c31253d8c1
commit 5efba059ed
3 changed files with 13 additions and 7 deletions

View File

@ -24,6 +24,7 @@
#include <boost/fusion/support/sequence_base.hpp> #include <boost/fusion/support/sequence_base.hpp>
#include <boost/mpl/int.hpp> #include <boost/mpl/int.hpp>
#include <boost/mpl/bool.hpp> #include <boost/mpl/bool.hpp>
#include <boost/mpl/or.hpp>
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
@ -86,7 +87,12 @@ namespace boost { namespace fusion
template <typename Sequence> template <typename Sequence>
explicit cons( explicit cons(
Sequence const& seq Sequence const& seq
, typename disable_if<is_convertible<Sequence, Car> >::type* dummy = 0) , typename disable_if<
mpl::or_<
is_convertible<Sequence, cons> // use copy ctor instead
, is_convertible<Sequence, Car> // use copy to car instead
>
>::type* dummy = 0)
: car(*fusion::begin(seq)) : car(*fusion::begin(seq))
, cdr(fusion::next(fusion::begin(seq)), mpl::true_()) {} , cdr(fusion::next(fusion::begin(seq)), mpl::true_()) {}

View File

@ -18,13 +18,13 @@
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
template <typename IStream, typename Sequence> template <typename Sequence>
inline typename inline typename
enable_if< enable_if<
fusion::traits::is_sequence<Sequence> fusion::traits::is_sequence<Sequence>
, IStream& , std::istream&
>::type >::type
operator>>(IStream& is, Sequence& seq) operator>>(std::istream& is, Sequence& seq)
{ {
detail::read_sequence(is, seq); detail::read_sequence(is, seq);
return is; return is;

View File

@ -18,13 +18,13 @@
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
template <typename OStream, typename Sequence> template <typename Sequence>
inline typename inline typename
enable_if< enable_if<
fusion::traits::is_sequence<Sequence> fusion::traits::is_sequence<Sequence>
, OStream& , std::ostream&
>::type >::type
operator<<(OStream& os, Sequence const& seq) operator<<(std::ostream& os, Sequence const& seq)
{ {
detail::print_sequence(os, seq); detail::print_sequence(os, seq);
return os; return os;