From 47ff2e6cb5c8479cf2b7875867590f0af1f99324 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Sat, 7 Jul 2018 07:18:56 +0900 Subject: [PATCH] find_if: Improved tag usage The traversal tag is a bit complex than before. --- .../fusion/algorithm/query/detail/find_if.hpp | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/include/boost/fusion/algorithm/query/detail/find_if.hpp b/include/boost/fusion/algorithm/query/detail/find_if.hpp index 56c5296c..06a7af79 100644 --- a/include/boost/fusion/algorithm/query/detail/find_if.hpp +++ b/include/boost/fusion/algorithm/query/detail/find_if.hpp @@ -22,10 +22,9 @@ #include #include #include +#include -namespace boost { namespace fusion { - struct random_access_traversal_tag; -namespace detail +namespace boost { namespace fusion { namespace detail { template struct apply_filter @@ -179,7 +178,7 @@ namespace detail First , Last , Pred - , is_base_of::type>::value + , traits::is_random_access::value >::type type; @@ -208,31 +207,23 @@ namespace detail return recursive_call(iter, found()); } - template + template BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED - static type - choose_call(Iterator const& iter, Tag) + static typename boost::disable_if, type>::type + iter_call(Iterator const& iter) { return recursive_call(iter); } template BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED - static type - choose_call(Iterator const& iter, random_access_traversal_tag) + static typename boost::enable_if, type>::type + iter_call(Iterator const& iter) { typedef typename result_of::distance::type N; return fusion::advance(iter); } - template - BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED - static type - iter_call(Iterator const& iter) - { - return choose_call(iter, typename traits::category_of::type()); - } - template BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type