Merge from trunk

[SVN r75980]
This commit is contained in:
Joel de Guzman
2011-12-16 02:14:17 +00:00
parent 44b337abb0
commit 9a8955fbe1
41 changed files with 287 additions and 118 deletions

View File

@ -12,6 +12,7 @@
#include <boost/fusion/support/deduce.hpp>
#include <boost/fusion/container/vector/convert.hpp>
#include <boost/fusion/view/transform_view.hpp>
#include <boost/config.hpp>
namespace boost { namespace fusion { namespace traits
@ -29,6 +30,13 @@ namespace boost { namespace fusion { namespace traits
struct result< Self(T) >
: fusion::traits::deduce<T>
{ };
// never called, but needed for decltype-based result_of (C++0x)
#ifndef BOOST_NO_RVALUE_REFERENCES
template <typename T>
typename result< deducer(T) >::type
operator()(T&&) const;
#endif
};
}

View File

@ -46,28 +46,29 @@ namespace boost { namespace fusion
namespace detail
{
BOOST_MPL_HAS_XXX_TRAIT_DEF(fusion_tag)
template <typename Sequence, typename Active>
struct tag_of_impl
: mpl::if_<fusion::detail::is_mpl_sequence<Sequence>,
mpl::identity<mpl_sequence_tag>,
mpl::identity<non_fusion_tag> >::type
{};
template <typename Sequence>
struct tag_of_impl<
Sequence
, typename boost::enable_if<detail::has_fusion_tag<Sequence> >::type>
{
typedef typename Sequence::fusion_tag type;
};
}
namespace traits
{
template <typename Sequence, typename Active>
struct tag_of_fallback
{
typedef non_fusion_tag type;
};
template <typename Sequence, typename Active>
struct tag_of
: mpl::if_< fusion::detail::is_mpl_sequence<Sequence>,
mpl::identity<mpl_sequence_tag>,
tag_of_fallback<Sequence> >::type
: boost::fusion::detail::tag_of_impl<Sequence, Active>
{};
template <typename Sequence>
struct tag_of<Sequence, typename boost::enable_if<detail::has_fusion_tag<Sequence> >::type>
{
typedef typename Sequence::fusion_tag type;
};
}
namespace detail

View File

@ -12,9 +12,6 @@ namespace boost { namespace fusion
{
namespace traits
{
template <typename Sequence, typename Active = void>
struct tag_of_fallback;
template<typename T, typename Active = void>
struct tag_of;
}