Merge upstream branch 'develop' into more-ci-targets

This commit is contained in:
Kohei Takahashi
2018-04-22 03:41:55 +09:00
21 changed files with 231 additions and 82 deletions

View File

@ -26,7 +26,13 @@ namespace boost { namespace fusion { namespace detail
BOOST_FUSION_BARRIER_BEGIN
template <int size>
struct as_deque;
struct as_deque
{
BOOST_STATIC_ASSERT_MSG(
size <= FUSION_MAX_DEQUE_SIZE
, "FUSION_MAX_DEQUE_SIZE limit is too low"
);
};
template <>
struct as_deque<0>

View File

@ -25,7 +25,13 @@ namespace boost { namespace fusion { namespace detail
BOOST_FUSION_BARRIER_BEGIN
template <int size, bool is_assoc>
struct as_map;
struct as_map
{
BOOST_STATIC_ASSERT_MSG(
size <= FUSION_MAX_MAP_SIZE
, "FUSION_MAX_MAP_SIZE limit is too low"
);
};
template <bool is_assoc>
struct as_map<0, is_assoc>

View File

@ -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;

View File

@ -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;
};
};
}

View File

@ -25,7 +25,13 @@ namespace boost { namespace fusion { namespace detail
BOOST_FUSION_BARRIER_BEGIN
template <int size>
struct as_set;
struct as_set
{
BOOST_STATIC_ASSERT_MSG(
size <= FUSION_MAX_SET_SIZE
, "FUSION_MAX_SET_SIZE limit is too low"
);
};
template <>
struct as_set<0>

View File

@ -25,7 +25,13 @@ namespace boost { namespace fusion { namespace detail
BOOST_FUSION_BARRIER_BEGIN
template <int size>
struct as_vector;
struct as_vector
{
BOOST_STATIC_ASSERT_MSG(
size <= FUSION_MAX_VECTOR_SIZE
, "FUSION_MAX_VECTOR_SIZE limit is too low"
);
};
template <>
struct as_vector<0>

View File

@ -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;
};
};
}

View File

@ -1,6 +1,6 @@
/*=============================================================================
Copyright (c) 2014 Eric Niebler
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)
@ -96,4 +96,16 @@ 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))
# 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
#endif

View File

@ -13,6 +13,7 @@
#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
@ -20,7 +21,7 @@ namespace boost { namespace fusion { namespace detail
template <typename T>
struct is_mpl_sequence
: mpl::and_<
mpl::not_<is_convertible<T, from_sequence_convertible_type> >
mpl::not_<mpl::and_<is_complete<T>, is_convertible<T, from_sequence_convertible_type> > >
, mpl::is_sequence<T> >
{};
}}}

View File

@ -10,9 +10,11 @@
#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/mpl/bool.hpp>
#include <boost/mpl/is_sequence.hpp>
#include <boost/mpl/or.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/type_traits/is_complete.hpp>
#include <boost/type_traits/is_convertible.hpp>
#include <boost/type_traits/is_same.hpp>
@ -69,7 +71,10 @@ namespace boost { namespace fusion
template <typename Sequence, typename Enable = void>
struct is_native_fusion_sequence
: is_convertible<Sequence, fusion::detail::from_sequence_convertible_type>
: mpl::and_<
is_complete<Sequence>,
is_convertible<Sequence, fusion::detail::from_sequence_convertible_type>
>
{};
}
}}