strictest_traversal.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 69 行

HPP
69
字号
/*=============================================================================    Copyright (c) 2001-2006 Joel de Guzman    Copyright (c) 2006 Dan Marsden    Distributed under the Boost Software License, Version 1.0. (See accompanying    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)==============================================================================*/#if !defined(FUSION_STRICTEST_TRAVERSAL_20060123_2101)#define FUSION_STRICTEST_TRAVERSAL_20060123_2101#include <boost/mpl/or.hpp>#include <boost/mpl/if.hpp>#include <boost/fusion/support/category_of.hpp>#include <boost/fusion/mpl.hpp>#include <boost/fusion/algorithm/iteration/fold.hpp>#include <boost/type_traits/remove_reference.hpp>#include <boost/type_traits/is_convertible.hpp>namespace boost { namespace fusion{    struct forward_traversal_tag;    struct bidirectional_traversal_tag;    struct random_access_traversal_tag;    namespace detail    {        template<typename Tag1, typename Tag2,            bool Tag1Stricter = boost::is_convertible<Tag2,Tag1>::value>        struct stricter_traversal        {            typedef Tag1 type;        };        template<typename Tag1, typename Tag2>        struct stricter_traversal<Tag1,Tag2,false>        {            typedef Tag2 type;        };        struct strictest_traversal_impl        {            template<typename Sig>            struct result;            template<typename Next, typename StrictestSoFar>            struct result<strictest_traversal_impl(Next, StrictestSoFar)>            {                typedef typename remove_reference<Next>::type next_value;                typedef typename remove_reference<StrictestSoFar>::type strictest_so_far;                typedef strictest_so_far tag1;                typedef typename traits::category_of<next_value>::type tag2;                typedef typename stricter_traversal<tag1,tag2>::type type;            };        };        template<typename Sequence>        struct strictest_traversal            : result_of::fold<            Sequence, fusion::random_access_traversal_tag,            strictest_traversal_impl>        {};    }}}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?