Fusion: fixed another const correctness problem

[SVN r56383]
This commit is contained in:
Hartmut Kaiser
2009-09-25 17:24:55 +00:00
parent 8ce4280e27
commit cb5b63fa93

View File

@ -31,7 +31,7 @@ namespace boost { namespace fusion
struct result;
template<typename U>
struct result<addref(U)> : boost::add_reference<U> {};
struct result<addref(U)> : add_reference<U> {};
template <typename T>
typename boost::result_of<addref(T)>::type
@ -40,6 +40,24 @@ namespace boost { namespace fusion
return x;
}
};
struct addconstref
{
template<typename Sig>
struct result;
template<typename U>
struct result<addconstref(U)>
: add_reference<typename add_const<U>::type>
{};
template <typename T>
typename boost::result_of<addconstref(T)>::type
operator()(T& x) const
{
return x;
}
};
}
struct nview_tag;
@ -58,12 +76,15 @@ namespace boost { namespace fusion
typedef Indicies index_type;
typedef typename mpl::size<Indicies>::type size;
typedef transform_view<Sequence, detail::addref> transform_view_type;
typedef typename mpl::if_<
is_const<Sequence>, detail::addconstref, detail::addref
>::type transform_type;
typedef transform_view<Sequence, transform_type> transform_view_type;
typedef typename result_of::as_vector<transform_view_type>::type
sequence_type;
explicit nview(Sequence& val)
: seq(as_vector(transform_view_type(val, detail::addref())))
: seq(sequence_type(transform_view_type(val, transform_type())))
{}
sequence_type seq;