summaryrefslogtreecommitdiff
path: root/boost/fusion
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2019-12-05 15:21:30 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2019-12-05 15:21:30 +0900
commitd6a306e745acfee00e81ccaf3324a2a03516db41 (patch)
tree145a26368608982f40ebb0f4836185c44abb9ae4 /boost/fusion
parent5ce2ccf2f23c6d3de4c79f216f57ca6f2a18ed16 (diff)
downloadboost-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.hpp4
-rw-r--r--boost/fusion/adapted/adt/adapt_assoc_adt.hpp3
-rw-r--r--boost/fusion/adapted/adt/detail/adapt_base.hpp18
-rw-r--r--boost/fusion/adapted/struct/adapt_assoc_struct.hpp4
-rw-r--r--boost/fusion/adapted/struct/adapt_struct.hpp4
-rw-r--r--boost/fusion/adapted/struct/detail/adapt_base.hpp2
-rw-r--r--boost/fusion/algorithm/query/detail/find_if.hpp29
-rw-r--r--boost/fusion/algorithm/transformation/remove_if.hpp4
-rw-r--r--boost/fusion/container/map/detail/value_at_key_impl.hpp8
-rw-r--r--boost/fusion/container/map/map_fwd.hpp2
-rw-r--r--boost/fusion/container/vector/detail/value_at_impl.hpp8
-rw-r--r--boost/fusion/container/vector/vector.hpp31
-rw-r--r--boost/fusion/support/config.hpp25
-rw-r--r--boost/fusion/support/detail/is_same_size.hpp13
-rw-r--r--boost/fusion/support/is_view.hpp8
-rw-r--r--boost/fusion/view/filter_view/detail/next_impl.hpp26
-rw-r--r--boost/fusion/view/filter_view/filter_view_iterator.hpp2
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>