Patches from Nathan Ridge using SFINAE to disable the Fusion algorithms for non-{Fusion sequence} types

[SVN r78463]
This commit is contained in:
Joel de Guzman
2012-05-14 00:37:21 +00:00
parent 66e8a6d3b7
commit b63c8214d7
15 changed files with 174 additions and 24 deletions

View File

@ -9,6 +9,8 @@
#include <boost/fusion/algorithm/iteration/accumulate_fwd.hpp>
#include <boost/fusion/algorithm/iteration/fold.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/utility/enable_if.hpp>
namespace boost { namespace fusion
{
@ -23,14 +25,24 @@ namespace boost { namespace fusion
}
template <typename Sequence, typename State, typename F>
inline typename result_of::accumulate<Sequence, State const, F>::type
inline
typename
lazy_enable_if<
traits::is_sequence<Sequence>
, result_of::accumulate<Sequence, State const, F>
>::type
accumulate(Sequence& seq, State const& state, F f)
{
return fusion::fold(seq, state, f);
}
template <typename Sequence, typename State, typename F>
inline typename result_of::accumulate<Sequence const, State const, F>::type
inline
typename
lazy_enable_if<
traits::is_sequence<Sequence>
, result_of::accumulate<Sequence const, State const, F>
>::type
accumulate(Sequence const& seq, State const& state, F f)
{
return fusion::fold(seq, state, f);