diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:21:30 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:21:30 +0900 |
commit | d6a306e745acfee00e81ccaf3324a2a03516db41 (patch) | |
tree | 145a26368608982f40ebb0f4836185c44abb9ae4 /boost/fusion | |
parent | 5ce2ccf2f23c6d3de4c79f216f57ca6f2a18ed16 (diff) | |
download | boost-d6a306e745acfee00e81ccaf3324a2a03516db41.tar.gz boost-d6a306e745acfee00e81ccaf3324a2a03516db41.tar.bz2 boost-d6a306e745acfee00e81ccaf3324a2a03516db41.zip |
Imported Upstream version 1.69.0upstream/1.69.0
Diffstat (limited to 'boost/fusion')
-rw-r--r-- | boost/fusion/adapted/adt/adapt_adt.hpp | 4 | ||||
-rw-r--r-- | boost/fusion/adapted/adt/adapt_assoc_adt.hpp | 3 | ||||
-rw-r--r-- | boost/fusion/adapted/adt/detail/adapt_base.hpp | 18 | ||||
-rw-r--r-- | boost/fusion/adapted/struct/adapt_assoc_struct.hpp | 4 | ||||
-rw-r--r-- | boost/fusion/adapted/struct/adapt_struct.hpp | 4 | ||||
-rw-r--r-- | boost/fusion/adapted/struct/detail/adapt_base.hpp | 2 | ||||
-rw-r--r-- | boost/fusion/algorithm/query/detail/find_if.hpp | 29 | ||||
-rw-r--r-- | boost/fusion/algorithm/transformation/remove_if.hpp | 4 | ||||
-rw-r--r-- | boost/fusion/container/map/detail/value_at_key_impl.hpp | 8 | ||||
-rw-r--r-- | boost/fusion/container/map/map_fwd.hpp | 2 | ||||
-rw-r--r-- | boost/fusion/container/vector/detail/value_at_impl.hpp | 8 | ||||
-rw-r--r-- | boost/fusion/container/vector/vector.hpp | 31 | ||||
-rw-r--r-- | boost/fusion/support/config.hpp | 25 | ||||
-rw-r--r-- | boost/fusion/support/detail/is_same_size.hpp | 13 | ||||
-rw-r--r-- | boost/fusion/support/is_view.hpp | 8 | ||||
-rw-r--r-- | boost/fusion/view/filter_view/detail/next_impl.hpp | 26 | ||||
-rw-r--r-- | boost/fusion/view/filter_view/filter_view_iterator.hpp | 2 |
17 files changed, 75 insertions, 116 deletions
diff --git a/boost/fusion/adapted/adt/adapt_adt.hpp b/boost/fusion/adapted/adt/adapt_adt.hpp index 2ebc76c36b..3f99fb2eb7 100644 --- a/boost/fusion/adapted/adt/adapt_adt.hpp +++ b/boost/fusion/adapted/adt/adapt_adt.hpp @@ -16,10 +16,6 @@ #include <boost/preprocessor/empty.hpp> #include <boost/preprocessor/control/if.hpp> #include <boost/preprocessor/comparison/less.hpp> -#include <boost/type_traits/add_reference.hpp> -#include <boost/type_traits/is_const.hpp> -#include <boost/type_traits/add_const.hpp> -#include <boost/type_traits/remove_const.hpp> #include <boost/fusion/adapted/struct/detail/extension.hpp> #include <boost/fusion/adapted/struct/detail/adapt_base.hpp> diff --git a/boost/fusion/adapted/adt/adapt_assoc_adt.hpp b/boost/fusion/adapted/adt/adapt_assoc_adt.hpp index bd451a32eb..dde9e75e88 100644 --- a/boost/fusion/adapted/adt/adapt_assoc_adt.hpp +++ b/boost/fusion/adapted/adt/adapt_assoc_adt.hpp @@ -15,9 +15,6 @@ #include <boost/preprocessor/cat.hpp> #include <boost/preprocessor/empty.hpp> #include <boost/preprocessor/control/if.hpp> -#include <boost/type_traits/add_reference.hpp> -#include <boost/type_traits/is_const.hpp> -#include <boost/type_traits/remove_const.hpp> #include <boost/fusion/adapted/struct/detail/extension.hpp> #include <boost/fusion/adapted/struct/detail/adapt_base.hpp> diff --git a/boost/fusion/adapted/adt/detail/adapt_base.hpp b/boost/fusion/adapted/adt/detail/adapt_base.hpp index 0ef6fcd92b..6bceb75791 100644 --- a/boost/fusion/adapted/adt/detail/adapt_base.hpp +++ b/boost/fusion/adapted/adt/detail/adapt_base.hpp @@ -21,8 +21,8 @@ #include <boost/preprocessor/tuple/elem.hpp> #include <boost/mpl/if.hpp> #include <boost/type_traits/is_const.hpp> -#include <boost/type_traits/add_const.hpp> #include <boost/type_traits/remove_const.hpp> +#include <boost/type_traits/remove_reference.hpp> #include <boost/typeof/typeof.hpp> @@ -83,20 +83,8 @@ typedef \ BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \ typename) \ - boost::remove_const< \ - BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \ - typename) \ - deduced_attr_type::type \ - >::type type; \ - \ - typedef \ - BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \ - typename) \ - boost::add_const< \ - BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \ - typename) \ - deduced_attr_type::type \ - >::type const_type; + deduced_attr_type::type type; \ + typedef type const_type; #define BOOST_FUSION_ADT_ATTRIBUTE_GIVENTYPE( \ NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \ diff --git a/boost/fusion/adapted/struct/adapt_assoc_struct.hpp b/boost/fusion/adapted/struct/adapt_assoc_struct.hpp index c8659fdfe1..b563221035 100644 --- a/boost/fusion/adapted/struct/adapt_assoc_struct.hpp +++ b/boost/fusion/adapted/struct/adapt_assoc_struct.hpp @@ -15,10 +15,6 @@ #include <boost/preprocessor/empty.hpp> #include <boost/preprocessor/control/iif.hpp> #include <boost/preprocessor/comparison/less.hpp> -#include <boost/type_traits/add_reference.hpp> -#include <boost/type_traits/is_const.hpp> -#include <boost/type_traits/add_const.hpp> -#include <boost/type_traits/remove_const.hpp> #include <boost/fusion/adapted/struct/detail/extension.hpp> #include <boost/fusion/adapted/struct/detail/adapt_base.hpp> diff --git a/boost/fusion/adapted/struct/adapt_struct.hpp b/boost/fusion/adapted/struct/adapt_struct.hpp index 66710b47ff..928bc99570 100644 --- a/boost/fusion/adapted/struct/adapt_struct.hpp +++ b/boost/fusion/adapted/struct/adapt_struct.hpp @@ -18,10 +18,6 @@ #include <boost/preprocessor/comparison/less.hpp> #include <boost/preprocessor/seq/seq.hpp> #include <boost/preprocessor/variadic/to_seq.hpp> -#include <boost/type_traits/add_reference.hpp> -#include <boost/type_traits/is_const.hpp> -#include <boost/type_traits/add_const.hpp> -#include <boost/type_traits/remove_const.hpp> #include <boost/fusion/adapted/struct/detail/extension.hpp> #include <boost/fusion/adapted/struct/detail/adapt_base.hpp> diff --git a/boost/fusion/adapted/struct/detail/adapt_base.hpp b/boost/fusion/adapted/struct/detail/adapt_base.hpp index 84b9302c44..c66118f454 100644 --- a/boost/fusion/adapted/struct/detail/adapt_base.hpp +++ b/boost/fusion/adapted/struct/detail/adapt_base.hpp @@ -34,7 +34,9 @@ #include <boost/mpl/tag.hpp> #include <boost/mpl/eval_if.hpp> #include <boost/mpl/identity.hpp> +#include <boost/type_traits/is_const.hpp> #include <boost/type_traits/add_const.hpp> +#include <boost/type_traits/add_reference.hpp> #include <boost/typeof/typeof.hpp> diff --git a/boost/fusion/algorithm/query/detail/find_if.hpp b/boost/fusion/algorithm/query/detail/find_if.hpp index b200794a48..06a7af79b7 100644 --- a/boost/fusion/algorithm/query/detail/find_if.hpp +++ b/boost/fusion/algorithm/query/detail/find_if.hpp @@ -2,6 +2,7 @@ Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Dan Marsden Copyright (c) 2009 Christopher Schmidt + Copyright (c) 2018 Kohei Takahashi 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) @@ -13,7 +14,6 @@ #include <boost/mpl/apply.hpp> #include <boost/mpl/eval_if.hpp> #include <boost/mpl/identity.hpp> -#include <boost/mpl/lambda.hpp> #include <boost/mpl/or.hpp> #include <boost/fusion/iterator/advance.hpp> #include <boost/fusion/iterator/distance.hpp> @@ -22,10 +22,9 @@ #include <boost/fusion/sequence/intrinsic/begin.hpp> #include <boost/fusion/sequence/intrinsic/end.hpp> #include <boost/fusion/support/category_of.hpp> +#include <boost/core/enable_if.hpp> -namespace boost { namespace fusion { - struct random_access_traversal_tag; -namespace detail +namespace boost { namespace fusion { namespace detail { template <typename Iterator, typename Pred> struct apply_filter @@ -178,8 +177,8 @@ namespace detail choose_find_if< First , Last - , typename mpl::lambda<Pred>::type - , is_base_of<random_access_traversal_tag, typename traits::category_of<First>::type>::value + , Pred + , traits::is_random_access<First>::value >::type type; @@ -208,31 +207,23 @@ namespace detail return recursive_call(iter, found()); } - template <typename Iterator, typename Tag> + template <typename Iterator> BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED - static type - choose_call(Iterator const& iter, Tag) + static typename boost::disable_if<traits::is_random_access<Iterator>, type>::type + iter_call(Iterator const& iter) { return recursive_call(iter); } template <typename Iterator> BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED - static type - choose_call(Iterator const& iter, random_access_traversal_tag) + static typename boost::enable_if<traits::is_random_access<Iterator>, type>::type + iter_call(Iterator const& iter) { typedef typename result_of::distance<Iterator, type>::type N; return fusion::advance<N>(iter); } - template <typename Iterator> - BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED - static type - iter_call(Iterator const& iter) - { - return choose_call(iter, typename traits::category_of<Iterator>::type()); - } - template <typename Sequence> BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type diff --git a/boost/fusion/algorithm/transformation/remove_if.hpp b/boost/fusion/algorithm/transformation/remove_if.hpp index 5497e3a371..3f8ebbcd73 100644 --- a/boost/fusion/algorithm/transformation/remove_if.hpp +++ b/boost/fusion/algorithm/transformation/remove_if.hpp @@ -1,7 +1,8 @@ /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2018 Kohei Takahashi - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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_REMOVE_IF_07162005_0818) @@ -10,7 +11,6 @@ #include <boost/fusion/support/config.hpp> #include <boost/fusion/view/filter_view/filter_view.hpp> #include <boost/mpl/not.hpp> -#include <boost/type_traits/is_same.hpp> namespace boost { namespace fusion { diff --git a/boost/fusion/container/map/detail/value_at_key_impl.hpp b/boost/fusion/container/map/detail/value_at_key_impl.hpp index da6259e67a..d53a8f02f4 100644 --- a/boost/fusion/container/map/detail/value_at_key_impl.hpp +++ b/boost/fusion/container/map/detail/value_at_key_impl.hpp @@ -24,12 +24,10 @@ namespace boost { namespace fusion struct value_at_key_impl<map_tag> { template <typename Sequence, typename Key> - struct apply - { - typedef typename BOOST_FUSION_IDENTIFIED_TYPE(( + struct apply : BOOST_FUSION_DECLTYPE_N3031(( boost::declval<Sequence>().get_val(mpl::identity<Key>()) - )) type; - }; + )) + {}; }; } }} diff --git a/boost/fusion/container/map/map_fwd.hpp b/boost/fusion/container/map/map_fwd.hpp index 18e445b03e..614ea24975 100644 --- a/boost/fusion/container/map/map_fwd.hpp +++ b/boost/fusion/container/map/map_fwd.hpp @@ -36,8 +36,6 @@ # include <boost/fusion/container/map/detail/cpp03/map_fwd.hpp> #else -#include <boost/fusion/container/map/detail/map_impl.hpp> - /////////////////////////////////////////////////////////////////////////////// // C++11 interface /////////////////////////////////////////////////////////////////////////////// diff --git a/boost/fusion/container/vector/detail/value_at_impl.hpp b/boost/fusion/container/vector/detail/value_at_impl.hpp index a2dd5fcdca..f29c0e14e5 100644 --- a/boost/fusion/container/vector/detail/value_at_impl.hpp +++ b/boost/fusion/container/vector/detail/value_at_impl.hpp @@ -47,12 +47,10 @@ namespace boost { namespace fusion struct value_at_impl<vector_tag> { template <typename Sequence, typename N> - struct apply - { - typedef typename BOOST_FUSION_IDENTIFIED_TYPE(( + struct apply : BOOST_FUSION_DECLTYPE_N3031(( vector_detail::value_at_impl<N::value>(boost::declval<Sequence*>()) - )) type; - }; + )) + {}; }; } }} diff --git a/boost/fusion/container/vector/vector.hpp b/boost/fusion/container/vector/vector.hpp index 4993e2eb7c..02ffe51450 100644 --- a/boost/fusion/container/vector/vector.hpp +++ b/boost/fusion/container/vector/vector.hpp @@ -168,9 +168,15 @@ namespace boost { namespace fusion : elem(std::forward<U>(rhs)) {} + using elem_type = T; T elem; }; + // placed outside of vector_data due to GCC < 6 bug + template <std::size_t J, typename U> + static inline BOOST_FUSION_GPU_ENABLED + store<J, U> store_at_impl(store<J, U>*); + template <typename I, typename ...T> struct vector_data; @@ -231,32 +237,23 @@ namespace boost { namespace fusion assign(std::forward<Sequence>(seq), detail::index_sequence<M...>()); } - template <std::size_t N, typename U> - static BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED - U& at_detail(store<N, U>* this_) - { - return this_->elem; - } - - template <std::size_t N, typename U> - static BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED - U const& at_detail(store<N, U> const* this_) - { - return this_->elem; - } + private: + template <std::size_t J> + using store_at = decltype(store_at_impl<J>(static_cast<vector_data*>(nullptr))); + public: template <typename J> BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED - auto at_impl(J) -> decltype(at_detail<J::value>(&std::declval<vector_data&>())) + typename store_at<J::value>::elem_type& at_impl(J) { - return at_detail<J::value>(this); + return store_at<J::value>::elem; } template <typename J> BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED - auto at_impl(J) const -> decltype(at_detail<J::value>(&std::declval<vector_data const&>())) + typename store_at<J::value>::elem_type const& at_impl(J) const { - return at_detail<J::value>(this); + return store_at<J::value>::elem; } }; } // namespace boost::fusion::vector_detail diff --git a/boost/fusion/support/config.hpp b/boost/fusion/support/config.hpp index d27266ed09..dc614d9d33 100644 --- a/boost/fusion/support/config.hpp +++ b/boost/fusion/support/config.hpp @@ -97,15 +97,26 @@ namespace std #endif -// Workaround for compiler which doesn't compile decltype(expr)::type. -// It expects decltype(expr) deduced as mpl::identity<T>. -#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) || BOOST_WORKAROUND(BOOST_GCC, < 40700) +// Workaround for compilers not implementing N3031 (DR743 and DR950). +#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) || \ + BOOST_WORKAROUND(BOOST_GCC, < 40700) || \ + defined(BOOST_CLANG) && (__clang_major__ == 3 && __clang_minor__ == 0) +# if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) +namespace boost { namespace fusion { namespace detail +{ + template <typename T> + using type_alias_t = T; +}}} +# define BOOST_FUSION_DECLTYPE_N3031(parenthesized_expr) \ + boost::fusion::detail::type_alias_t<decltype parenthesized_expr> +# else # include <boost/mpl/identity.hpp> -# define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \ - boost::mpl::identity<decltype parenthesized_expr>::type::type +# define BOOST_FUSION_DECLTYPE_N3031(parenthesized_expr) \ + boost::mpl::identity<decltype parenthesized_expr>::type +# endif #else -# define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \ - decltype parenthesized_expr ::type +# define BOOST_FUSION_DECLTYPE_N3031(parenthesized_expr) \ + decltype parenthesized_expr #endif diff --git a/boost/fusion/support/detail/is_same_size.hpp b/boost/fusion/support/detail/is_same_size.hpp index b1bf7cde41..02d2953438 100644 --- a/boost/fusion/support/detail/is_same_size.hpp +++ b/boost/fusion/support/detail/is_same_size.hpp @@ -9,20 +9,19 @@ #include <boost/fusion/support/is_sequence.hpp> #include <boost/fusion/sequence/intrinsic/size.hpp> -#include <boost/core/enable_if.hpp> #include <boost/mpl/bool.hpp> -#include <boost/mpl/equal_to.hpp> namespace boost { namespace fusion { namespace detail { - template <typename Sequence1, typename Sequence2, typename = void, typename = void> + template <typename Sequence1, typename Sequence2, bool + = traits::is_sequence<Sequence1>::value && + traits::is_sequence<Sequence2>::value> struct is_same_size : mpl::false_ {}; template <typename Sequence1, typename Sequence2> - struct is_same_size<Sequence1, Sequence2, - typename enable_if<traits::is_sequence<Sequence1> >::type, - typename enable_if<traits::is_sequence<Sequence2> >::type> - : mpl::equal_to<result_of::size<Sequence1>, result_of::size<Sequence2> > + struct is_same_size<Sequence1, Sequence2, true> + : mpl::bool_<result_of::size<Sequence1>::value == + result_of::size<Sequence2>::value> {}; }}} diff --git a/boost/fusion/support/is_view.hpp b/boost/fusion/support/is_view.hpp index a6ca725946..b2b52c423e 100644 --- a/boost/fusion/support/is_view.hpp +++ b/boost/fusion/support/is_view.hpp @@ -14,6 +14,7 @@ namespace boost { namespace fusion { // Special tags: + struct non_fusion_tag; struct sequence_facade_tag; struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_array_tag; // boost::array tag @@ -33,6 +34,13 @@ namespace boost { namespace fusion }; template <> + struct is_view_impl<non_fusion_tag> + { + template <typename T> + struct apply : mpl::false_ {}; + }; + + template <> struct is_view_impl<sequence_facade_tag> { template <typename Sequence> diff --git a/boost/fusion/view/filter_view/detail/next_impl.hpp b/boost/fusion/view/filter_view/detail/next_impl.hpp index 4f17455766..bd1404b9f0 100644 --- a/boost/fusion/view/filter_view/detail/next_impl.hpp +++ b/boost/fusion/view/filter_view/detail/next_impl.hpp @@ -1,5 +1,6 @@ /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2018 Kohei Takahashi 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) @@ -8,14 +9,10 @@ #define FUSION_NEXT_IMPL_06052005_0900 #include <boost/fusion/support/config.hpp> -#include <boost/fusion/algorithm/query/detail/find_if.hpp> -#include <boost/fusion/iterator/value_of.hpp> +#include <boost/fusion/iterator/next.hpp> +#include <boost/fusion/iterator/equal_to.hpp> #include <boost/mpl/eval_if.hpp> #include <boost/mpl/identity.hpp> -#include <boost/mpl/lambda.hpp> -#include <boost/mpl/quote.hpp> -#include <boost/mpl/bind.hpp> -#include <boost/mpl/placeholders.hpp> namespace boost { namespace fusion { @@ -48,26 +45,13 @@ namespace boost { namespace fusion >::type next_type; - typedef typename - detail::static_find_if< - next_type - , last_type - , mpl::bind1< - typename mpl::lambda<pred_type>::type - , mpl::bind1<mpl::quote1<result_of::value_of>,mpl::_1> - > - > - filter; - - typedef filter_iterator< - category, typename filter::type, last_type, pred_type> - type; + typedef filter_iterator<category, next_type, last_type, pred_type> type; BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { - return type(filter::iter_call(i.first)); + return type(fusion::next(i.first)); } }; }; diff --git a/boost/fusion/view/filter_view/filter_view_iterator.hpp b/boost/fusion/view/filter_view/filter_view_iterator.hpp index f1b9f54de3..8d77e12e34 100644 --- a/boost/fusion/view/filter_view/filter_view_iterator.hpp +++ b/boost/fusion/view/filter_view/filter_view_iterator.hpp @@ -1,5 +1,6 @@ /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2018 Kohei Takahashi 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) @@ -9,7 +10,6 @@ #include <boost/fusion/support/config.hpp> #include <boost/fusion/iterator/mpl/convert_iterator.hpp> -#include <boost/fusion/adapted/mpl/mpl_iterator.hpp> #include <boost/fusion/iterator/value_of.hpp> #include <boost/fusion/support/iterator_base.hpp> #include <boost/fusion/algorithm/query/detail/find_if.hpp> |