forked from boostorg/fusion
Merge from trunk
[SVN r75980]
This commit is contained in:
@ -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
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user