Fusion: removed fusion::sequence_root; Fixes #2335

[SVN r66411]
This commit is contained in:
Christopher Schmidt
2010-11-06 12:21:18 +00:00
parent 09bd088660
commit 6eba238b69
7 changed files with 59 additions and 18 deletions

View File

@ -9,17 +9,17 @@
#define FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/type_traits/is_base_of.hpp>
#include <boost/mpl/is_sequence.hpp>
#include <boost/mpl/and.hpp>
#include <boost/mpl/not.hpp>
#include <boost/type_traits/is_convertible.hpp>
namespace boost { namespace fusion { namespace detail
{
template <typename T>
struct is_mpl_sequence
: mpl::and_<
mpl::not_<is_base_of<sequence_root, T> >
mpl::not_<is_convertible<T, from_sequence_convertible_type> >
, mpl::is_sequence<T> >
{};
}}}

View File

@ -7,12 +7,13 @@
#if !defined(FUSION_IS_SEQUENCE_05052005_1002)
#define FUSION_IS_SEQUENCE_05052005_1002
#include <boost/type_traits/is_base_of.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/mpl/is_sequence.hpp>
#include <boost/mpl/or.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/type_traits/is_convertible.hpp>
#include <boost/type_traits/is_same.hpp>
namespace boost { namespace fusion
{
@ -29,7 +30,9 @@ namespace boost { namespace fusion
struct is_sequence_impl
{
template <typename Sequence>
struct apply : is_base_of<sequence_root, Sequence> {};
struct apply
: is_convertible<Sequence, detail::from_sequence_convertible_type>
{};
};
template <>

View File

@ -12,10 +12,14 @@
namespace boost { namespace fusion
{
struct sequence_root {};
namespace detail
{
struct from_sequence_convertible_type
{};
}
template <typename Sequence>
struct sequence_base : sequence_root
struct sequence_base
{
Sequence const&
derived() const
@ -28,6 +32,11 @@ namespace boost { namespace fusion
{
return static_cast<Sequence&>(*this);
}
operator detail::from_sequence_convertible_type()const
{
return detail::from_sequence_convertible_type();
}
};
struct fusion_sequence_tag;