forked from boostorg/fusion
Merge upstream branch 'develop' into optimization/vector-and-tuple
This commit is contained in:
31 files changed
+404
-208
No files matched your search
@@ -13,6 +13,11 @@
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <boost/fusion/iterator/next.hpp>
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && BOOST_WORKAROUND(BOOST_GCC, / 100 == 404)
|
||||
#include <boost/core/enable_if.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#endif
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct fusion_sequence_tag;
|
||||
@@ -114,8 +119,13 @@ namespace boost { namespace fusion { namespace detail
|
||||
{}
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
#if BOOST_WORKAROUND(BOOST_GCC, / 100 == 404)
|
||||
template <typename Value_, typename = typename enable_if<is_same<Value_, Value> >::type>
|
||||
#else
|
||||
typedef Value Value_;
|
||||
#endif
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
keyed_element(Value&& value, Rest&& rest)
|
||||
keyed_element(Value_&& value, Rest&& rest)
|
||||
: Rest(std::move(rest))
|
||||
, value_(BOOST_FUSION_FWD_ELEM(Value, value))
|
||||
{}
|
||||
|
||||
@@ -70,6 +70,10 @@ namespace boost { namespace fusion
|
||||
cons(cons<Car2, Cdr2> const& rhs)
|
||||
: car(rhs.car), cdr(rhs.cdr) {}
|
||||
|
||||
#if BOOST_WORKAROUND(BOOST_GCC, / 100 == 406) && !defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS)
|
||||
// Workaround for `array used as initializer` compile error on gcc 4.6 w/ c++0x.
|
||||
template <typename = void>
|
||||
#endif
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
cons(cons const& rhs)
|
||||
: car(rhs.car), cdr(rhs.cdr) {}
|
||||
|
||||
@@ -125,11 +125,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
}
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
value_type get_val(mpl::identity<key_type>);
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
pair_type get_val(mpl::int_<index>);
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
value_type get_val(mpl::identity<key_type>) const;
|
||||
mpl::identity<value_type> get_val(mpl::identity<key_type>) const;
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
pair_type get_val(mpl::int_<index>) const;
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2013 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,10 +9,6 @@
|
||||
#define BOOST_FUSION_MAP_DETAIL_VALUE_AT_KEY_IMPL_02042013_0821
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/detail/access.hpp>
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/mpl/at.hpp>
|
||||
#include <boost/mpl/identity.hpp>
|
||||
#include <boost/utility/declval.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
@@ -29,9 +26,9 @@ namespace boost { namespace fusion
|
||||
template <typename Sequence, typename Key>
|
||||
struct apply
|
||||
{
|
||||
typedef
|
||||
decltype(boost::declval<Sequence>().get_val(mpl::identity<Key>()))
|
||||
type;
|
||||
typedef typename BOOST_FUSION_IDENTIFIED_TYPE((
|
||||
boost::declval<Sequence>().get_val(mpl::identity<Key>())
|
||||
)) type;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2014 Kohei Takahashi
|
||||
Copyright (c) 2014,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)
|
||||
@@ -7,7 +7,6 @@
|
||||
#ifndef FUSION_VALUE_AT_IMPL_16122014_1641
|
||||
#define FUSION_VALUE_AT_IMPL_16122014_1641
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/container/vector/detail/config.hpp>
|
||||
|
||||
@@ -23,6 +22,7 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#include <boost/fusion/container/vector/vector_fwd.hpp>
|
||||
#include <boost/type_traits/declval.hpp>
|
||||
#include <boost/mpl/identity.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@@ -35,7 +35,7 @@ namespace boost { namespace fusion
|
||||
|
||||
template <std::size_t N, typename U>
|
||||
static inline BOOST_FUSION_GPU_ENABLED
|
||||
U value_at_impl(store<N, U> const volatile*);
|
||||
mpl::identity<U> value_at_impl(store<N, U> const volatile*);
|
||||
}
|
||||
|
||||
namespace extension
|
||||
@@ -49,9 +49,9 @@ namespace boost { namespace fusion
|
||||
template <typename Sequence, typename N>
|
||||
struct apply
|
||||
{
|
||||
typedef
|
||||
decltype(vector_detail::value_at_impl<N::value>(boost::declval<Sequence*>()))
|
||||
type;
|
||||
typedef typename BOOST_FUSION_IDENTIFIED_TYPE((
|
||||
vector_detail::value_at_impl<N::value>(boost::declval<Sequence*>())
|
||||
)) type;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#define FUSION_CATEGORY_OF_07202005_0308
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/detail/category_of.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
#include <boost/type_traits/is_base_of.hpp>
|
||||
|
||||
@@ -44,7 +43,10 @@ namespace boost { namespace fusion
|
||||
struct category_of_impl
|
||||
{
|
||||
template<typename T>
|
||||
struct apply : detail::fusion_category_of<T> {};
|
||||
struct apply
|
||||
{
|
||||
typedef typename T::category type;
|
||||
};
|
||||
};
|
||||
|
||||
template <>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2014 Eric Niebler
|
||||
Copyright (c) 2014 Kohei Takahashi
|
||||
Copyright (c) 2014,2015,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)
|
||||
@@ -96,4 +96,24 @@ namespace std
|
||||
#define BOOST_FUSION_CONSTEXPR_THIS BOOST_CONSTEXPR
|
||||
#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)
|
||||
# include <boost/mpl/identity.hpp>
|
||||
# define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \
|
||||
boost::mpl::identity<decltype parenthesized_expr>::type::type
|
||||
#else
|
||||
# define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \
|
||||
decltype parenthesized_expr ::type
|
||||
#endif
|
||||
|
||||
|
||||
// Workaround for GCC 4.6 that rejects defaulted function with noexcept.
|
||||
#if BOOST_WORKAROUND(BOOST_GCC, / 100 == 406)
|
||||
# define BOOST_FUSION_NOEXCEPT_ON_DEFAULTED
|
||||
#else
|
||||
# define BOOST_FUSION_NOEXCEPT_ON_DEFAULTED BOOST_NOEXCEPT
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,5 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2016 Lee Clagett
|
||||
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,6 +9,7 @@
|
||||
#define FUSION_AND_07152016_1625
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/config/workaround.hpp>
|
||||
#include <boost/type_traits/integral_constant.hpp>
|
||||
|
||||
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
||||
@@ -15,6 +17,8 @@
|
||||
#endif
|
||||
|
||||
namespace boost { namespace fusion { namespace detail {
|
||||
#if defined(BOOST_NO_CXX17_FOLD_EXPRESSIONS) \
|
||||
|| BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913))
|
||||
template<typename ...Cond>
|
||||
struct and_impl : false_type {};
|
||||
|
||||
@@ -34,6 +38,10 @@ namespace boost { namespace fusion { namespace detail {
|
||||
recursive. */
|
||||
template<typename ...Cond>
|
||||
struct and_ : and_impl1<Cond::value...> {};
|
||||
#else
|
||||
template <typename ...Cond>
|
||||
struct and_ : integral_constant<bool, ((bool)Cond::value && ...)> {};
|
||||
#endif
|
||||
}}}
|
||||
|
||||
#endif // FUSION_AND_07152016_1625
|
||||
@@ -1,19 +0,0 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
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_CATEGORY_OF_07212005_1025)
|
||||
#define FUSION_CATEGORY_OF_07212005_1025
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
struct fusion_category_of
|
||||
{
|
||||
typedef typename T::category type;
|
||||
};
|
||||
}}}
|
||||
|
||||
#endif
|
||||
@@ -9,19 +9,17 @@
|
||||
#define FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/sequence_base.hpp>
|
||||
#include <boost/fusion/support/detail/is_native_fusion_sequence.hpp>
|
||||
#include <boost/mpl/is_sequence.hpp>
|
||||
#include <boost/mpl/and.hpp>
|
||||
#include <boost/mpl/not.hpp>
|
||||
#include <boost/type_traits/is_complete.hpp>
|
||||
#include <boost/type_traits/is_convertible.hpp>
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
struct is_mpl_sequence
|
||||
: mpl::and_<
|
||||
mpl::not_<mpl::and_<is_complete<T>, is_convertible<T, from_sequence_convertible_type> > >
|
||||
mpl::not_<is_native_fusion_sequence<T> >
|
||||
, mpl::is_sequence<T> >
|
||||
{};
|
||||
}}}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
/*=============================================================================
|
||||
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)
|
||||
==============================================================================*/
|
||||
#ifndef BOOST_FUSION_IS_NATIVE_FUSION_SEQUENCE
|
||||
#define BOOST_FUSION_IS_NATIVE_FUSION_SEQUENCE
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/sequence_base.hpp>
|
||||
#include <boost/mpl/and.hpp>
|
||||
#include <boost/type_traits/is_complete.hpp>
|
||||
#include <boost/type_traits/is_convertible.hpp>
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct is_native_fusion_sequence
|
||||
: mpl::and_<
|
||||
is_complete<Sequence>
|
||||
, is_convertible<Sequence, detail::from_sequence_convertible_type>
|
||||
>
|
||||
{};
|
||||
}}}
|
||||
|
||||
#endif
|
||||
@@ -1,19 +0,0 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
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_IS_VIEW_03202006_0018)
|
||||
#define FUSION_IS_VIEW_03202006_0018
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
struct fusion_is_view
|
||||
{
|
||||
typedef typename T::is_view type;
|
||||
};
|
||||
}}}
|
||||
|
||||
#endif
|
||||
@@ -1,16 +0,0 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
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_UNKNOWN_KEY_09242005_1219)
|
||||
#define FUSION_UNKNOWN_KEY_09242005_1219
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <int index>
|
||||
struct unknown_key {};
|
||||
}}}
|
||||
|
||||
#endif
|
||||
@@ -10,13 +10,10 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/sequence_base.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
#include <boost/mpl/and.hpp>
|
||||
#include <boost/fusion/support/detail/is_native_fusion_sequence.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/mpl/is_sequence.hpp>
|
||||
#include <boost/mpl/or.hpp>
|
||||
#include <boost/type_traits/is_complete.hpp>
|
||||
#include <boost/type_traits/is_convertible.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@@ -69,13 +66,7 @@ namespace boost { namespace fusion
|
||||
>
|
||||
{};
|
||||
|
||||
template <typename Sequence, typename Enable = void>
|
||||
struct is_native_fusion_sequence
|
||||
: mpl::and_<
|
||||
is_complete<Sequence>,
|
||||
is_convertible<Sequence, fusion::detail::from_sequence_convertible_type>
|
||||
>
|
||||
{};
|
||||
using detail::is_native_fusion_sequence;
|
||||
}
|
||||
}}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/fusion/support/detail/is_view.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
@@ -28,8 +27,9 @@ namespace boost { namespace fusion
|
||||
{
|
||||
template <typename T>
|
||||
struct apply
|
||||
: detail::fusion_is_view<T>
|
||||
{};
|
||||
{
|
||||
typedef typename T::is_view type;
|
||||
};
|
||||
};
|
||||
|
||||
template <>
|
||||
|
||||
@@ -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)
|
||||
@@ -10,7 +11,6 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <iosfwd>
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#if defined(BOOST_MSVC)
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable: 4522) // multiple assignment operators specified warning
|
||||
@@ -23,9 +23,16 @@ namespace boost { namespace fusion
|
||||
struct unused_type
|
||||
{
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
unused_type() BOOST_NOEXCEPT
|
||||
BOOST_DEFAULTED_FUNCTION(
|
||||
unused_type() BOOST_FUSION_NOEXCEPT_ON_DEFAULTED,
|
||||
{
|
||||
}
|
||||
})
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_DEFAULTED_FUNCTION(
|
||||
unused_type(unused_type const&) BOOST_FUSION_NOEXCEPT_ON_DEFAULTED,
|
||||
{
|
||||
})
|
||||
|
||||
template <typename T>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
@@ -33,35 +40,12 @@ namespace boost { namespace fusion
|
||||
{
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
BOOST_FUSION_CONSTEXPR_THIS BOOST_FUSION_GPU_ENABLED
|
||||
unused_type const&
|
||||
operator=(T const&) const BOOST_NOEXCEPT
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
unused_type&
|
||||
operator=(T const&) BOOST_NOEXCEPT
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
BOOST_FUSION_CONSTEXPR_THIS BOOST_FUSION_GPU_ENABLED
|
||||
unused_type const&
|
||||
operator=(unused_type const&) const BOOST_NOEXCEPT
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
unused_type&
|
||||
operator=(unused_type const&) BOOST_NOEXCEPT
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
BOOST_CONSTEXPR_OR_CONST unused_type unused = unused_type();
|
||||
|
||||
Reference in new issue
Block a user