Merge branch 'develop'

This commit is contained in:
djowel
2022-09-26 08:11:49 +08:00
parent 6539567952
commit e79a8690f0
73 changed files with 1610 additions and 139 deletions

View File

@ -18,6 +18,11 @@
#include <boost/type_traits/is_const.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct random_access_traversal_tag;
@ -102,11 +107,13 @@ namespace boost { namespace fusion
return type();
}
};
BOOST_DELETED_FUNCTION(array_iterator& operator=(array_iterator const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{

View File

@ -45,6 +45,10 @@ namespace boost { namespace fusion
template <typename Cons>
struct boost_tuple_iterator_identity;
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
template <typename Cons = tuples::null_type>
struct boost_tuple_iterator
: iterator_facade<boost_tuple_iterator<Cons>, forward_traversal_tag>
@ -143,10 +147,10 @@ namespace boost { namespace fusion
struct equal_to
: is_same<typename I1::identity, typename I2::identity>
{};
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(boost_tuple_iterator& operator= (boost_tuple_iterator const&))
};
#ifdef _MSC_VER
# pragma warning(pop)
#endif
template <typename Null>
struct boost_tuple_null_iterator

View File

@ -19,6 +19,11 @@
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/fusion/adapted/std_array/detail/array_size.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct random_access_traversal_tag;
@ -99,9 +104,11 @@ namespace boost { namespace fusion
return type();
}
};
BOOST_DELETED_FUNCTION(std_array_iterator& operator=(std_array_iterator const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#endif

View File

@ -17,6 +17,11 @@
#include <tuple>
#include <utility>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct random_access_traversal_tag;
@ -107,6 +112,10 @@ namespace boost { namespace fusion
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{

View File

@ -326,6 +326,9 @@
#define BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR_IMPL_IMPL( \
NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \
\
BOOST_FUSION_PUSH_WARNINGS \
BOOST_FUSION_DISABLE_MSVC_WARNING(4512) \
\
template <typename boost_fusion_detail_Seq, int N> \
struct BOOST_FUSION_ITERATOR_NAME(NAME) \
: boost::fusion::iterator_facade< \
@ -418,7 +421,10 @@
return type(it.seq_); \
} \
}; \
};
}; \
\
BOOST_FUSION_POP_WARNINGS \
/**/
#define BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \

View File

@ -19,6 +19,9 @@
\
BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ) \
\
BOOST_FUSION_PUSH_WARNINGS \
BOOST_FUSION_DISABLE_MSVC_WARNING(4512) \
\
struct NAME \
{ \
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
@ -27,10 +30,10 @@
{} \
\
WRAPPED_TYPE& obj; \
\
BOOST_DELETED_FUNCTION(NAME& operator= (NAME const&)) \
}; \
\
BOOST_FUSION_POP_WARNINGS \
\
BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)
#define BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE( \

View File

@ -14,6 +14,10 @@
namespace boost { namespace fusion { namespace detail
{
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
template <typename Fun>
struct segmented_fold_fun
{
@ -37,6 +41,9 @@ namespace boost { namespace fusion { namespace detail
}
};
};
#ifdef _MSC_VER
# pragma warning(pop)
#endif
// The default implementation of this lives in detail/fold.hpp
template <typename Sequence, typename State, typename Fun, bool IsSequence, bool IsSegmented>

View File

@ -13,6 +13,11 @@
#include <boost/fusion/algorithm/iteration/for_each_fwd.hpp>
#include <boost/fusion/support/segmented_fold_until.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion { namespace detail
{
template <typename Fun>
@ -49,4 +54,8 @@ namespace boost { namespace fusion { namespace detail
}
}}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#endif

View File

@ -18,6 +18,11 @@
#include <boost/mpl/int.hpp>
#include <boost/mpl/if.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
template <typename Iterator_, bool IsLast>
@ -168,5 +173,9 @@ namespace boost { namespace fusion
}
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#endif

View File

@ -20,6 +20,11 @@
#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/add_reference.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion {
struct bidirectional_traversal_tag;
@ -110,13 +115,14 @@ namespace boost { namespace fusion {
{};
Seq& seq_;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(deque_iterator& operator= (deque_iterator const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{

View File

@ -26,6 +26,10 @@ namespace boost { namespace fusion
template <typename Cons>
struct cons_iterator_identity;
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
template <typename Cons = nil_>
struct cons_iterator : iterator_base<cons_iterator<Cons> >
{
@ -41,10 +45,10 @@ namespace boost { namespace fusion
: cons(in_cons) {}
cons_type& cons;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(cons_iterator& operator= (cons_iterator const&))
};
#ifdef _MSC_VER
# pragma warning(pop)
#endif
struct nil_iterator : iterator_base<nil_iterator>
{

View File

@ -17,6 +17,11 @@
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/add_const.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct random_access_traversal_tag;
@ -155,13 +160,13 @@ namespace boost { namespace fusion
{};
Seq& seq_;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(map_iterator& operator= (map_iterator const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{

View File

@ -220,21 +220,12 @@ namespace boost { namespace fusion
void
assign_sequence(Sequence&& seq)
{
assign(std::forward<Sequence>(seq), detail::index_sequence<I...>());
}
template <typename Sequence>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
void
assign(Sequence&&, detail::index_sequence<>) {}
template <typename Sequence, std::size_t N, std::size_t ...M>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
void
assign(Sequence&& seq, detail::index_sequence<N, M...>)
{
at_impl(mpl::int_<N>()) = vector_detail::forward_at_c<N>(seq);
assign(std::forward<Sequence>(seq), detail::index_sequence<M...>());
#ifndef BOOST_NO_CXX17_FOLD_EXPRESSIONS
(void(store<I, T>::elem = vector_detail::forward_at_c<I>(static_cast<Sequence&&>(seq))), ...);
#else
int nofold[] = { (void(store<I, T>::elem = vector_detail::forward_at_c<I>(static_cast<Sequence&&>(seq))), 0)..., 0 };
(void)nofold;
#endif
}
private:

View File

@ -19,6 +19,11 @@
#include <boost/type_traits/add_const.hpp>
#include <boost/mpl/int.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct vector_iterator_tag;
@ -41,17 +46,14 @@ namespace boost { namespace fusion
vector_iterator(Vector& in_vec)
: vec(in_vec) {}
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
vector_iterator(vector_iterator const& rhs)
: vec(rhs.vec) {}
Vector& vec;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(vector_iterator& operator= (vector_iterator const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{

View File

@ -0,0 +1,12 @@
/*=============================================================================
Copyright (c) 2022 Denis Mikhailov
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_INCLUDE_IDENTITY_VIEW)
#define FUSION_INCLUDE_IDENTITY_VIEW
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/identity_view.hpp>
#endif

View File

@ -13,6 +13,11 @@
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion { namespace detail
{
struct segment_sequence_tag {};
@ -36,6 +41,10 @@ namespace boost { namespace fusion { namespace detail
};
}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
namespace extension
{
template<typename Tag>

View File

@ -19,6 +19,11 @@
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/type_traits/remove_const.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
template <typename Derived_, typename Iterator_,
@ -135,6 +140,10 @@ namespace boost { namespace fusion
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{

View File

@ -75,6 +75,10 @@ namespace boost { namespace fusion
}
};
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
template <typename Tag, typename Stream>
class string_ios_manip
{
@ -143,10 +147,10 @@ namespace boost { namespace fusion
}
Stream& stream;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(string_ios_manip& operator= (string_ios_manip const&))
};
#ifdef _MSC_VER
# pragma warning(pop)
#endif
} // detail

View File

@ -127,4 +127,14 @@ namespace boost { namespace fusion { namespace detail
# define BOOST_FUSION_NOEXCEPT_ON_DEFAULTED BOOST_NOEXCEPT
#endif
#ifdef _MSC_VER
# define BOOST_FUSION_PUSH_WARNINGS __pragma(warning(push))
# define BOOST_FUSION_POP_WARNINGS __pragma(warning(pop))
# define BOOST_FUSION_DISABLE_MSVC_WARNING(num) __pragma(warning(disable : num))
#else
# define BOOST_FUSION_PUSH_WARNINGS
# define BOOST_FUSION_POP_WARNINGS
# define BOOST_FUSION_DISABLE_MSVC_WARNING(num)
#endif
#endif

View File

@ -10,7 +10,7 @@
#define BOOST_FUSION_SUPPORT_DEDUCE_HPP_INCLUDED
#include <boost/fusion/support/config.hpp>
#include <boost/ref.hpp>
#include <boost/core/ref.hpp>
#ifndef BOOST_NO_CXX11_HDR_FUNCTIONAL
#include <functional>

View File

@ -9,7 +9,7 @@
#define FUSION_AS_FUSION_ELEMENT_05052005_0338
#include <boost/fusion/support/config.hpp>
#include <boost/ref.hpp>
#include <boost/core/ref.hpp>
#ifndef BOOST_NO_CXX11_HDR_FUNCTIONAL
#include <functional>

View File

@ -17,5 +17,6 @@
#include <boost/fusion/view/transform_view.hpp>
#include <boost/fusion/view/zip_view.hpp>
#include <boost/fusion/view/flatten_view.hpp>
#include <boost/fusion/view/identity_view.hpp>
#endif

View File

@ -22,6 +22,11 @@
#include <boost/mpl/inherit.hpp>
#include <boost/mpl/identity.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct filter_view_tag;
@ -51,22 +56,18 @@ namespace boost { namespace fusion
: seq(in_seq)
{}
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
filter_view(filter_view const& rhs)
: seq(rhs.seq)
{}
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
first_type first() const { return fusion::begin(seq); }
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
last_type last() const { return fusion::end(seq); }
typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(filter_view& operator= (filter_view const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#endif

View File

@ -26,6 +26,11 @@
#include <boost/fusion/view/filter_view/detail/value_of_data_impl.hpp>
#include <boost/fusion/view/filter_view/detail/key_of_impl.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct filter_view_iterator_tag;
@ -59,17 +64,14 @@ namespace boost { namespace fusion
filter_iterator(First const& in_first)
: first(filter::iter_call(first_converter::call(in_first))) {}
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
filter_iterator(filter_iterator const& rhs)
: first(rhs.first) {}
first_type first;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(filter_iterator& operator= (filter_iterator const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{

View File

@ -19,6 +19,10 @@
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/view/flatten_view/flatten_view_iterator.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
@ -52,6 +56,10 @@ namespace boost { namespace fusion
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
namespace boost { namespace fusion { namespace extension
{
template<>

View File

@ -19,6 +19,10 @@
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
@ -46,6 +50,10 @@ namespace boost { namespace fusion
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
namespace boost { namespace fusion { namespace detail
{
template<class Iterator, class = void>

View File

@ -0,0 +1,14 @@
/*=============================================================================
Copyright (c) 2022 Denis Mikhailov
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(BOOST_FUSION_SEQUENCE_IDENTITY_VIEW_HPP_INCLUDED)
#define BOOST_FUSION_SEQUENCE_IDENTITY_VIEW_HPP_INCLUDED
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/identity_view/identity_view.hpp>
#endif

View File

@ -0,0 +1,50 @@
/*=============================================================================
Copyright (c) 2022 Denis Mikhailov
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(BOOST_FUSION_IDENTITY_VIEW_HPP_INCLUDED)
#define BOOST_FUSION_IDENTITY_VIEW_HPP_INCLUDED
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/transform_view.hpp>
#include <boost/functional/identity.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion {
namespace detail {
struct identity : boost::identity
{
};
}
}}
namespace boost {
template<typename T>
struct result_of<fusion::detail::identity(T)>
{
typedef T type;
};
}
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion {
template<typename Sequence> struct identity_view
: transform_view<Sequence, detail::identity>
{
typedef transform_view<Sequence, detail::identity> base_type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
identity_view(Sequence& in_seq)
: base_type(in_seq, detail::identity()) {}
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#endif

View File

@ -25,6 +25,11 @@
#include <boost/mpl/inherit.hpp>
#include <boost/mpl/identity.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct joint_view_tag;
@ -69,15 +74,16 @@ namespace boost { namespace fusion
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
concat_last_type concat_last() const { return fusion::end(seq2); }
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(joint_view& operator= (joint_view const&))
private:
typename mpl::if_<traits::is_view<Sequence1>, Sequence1, Sequence1&>::type seq1;
typename mpl::if_<traits::is_view<Sequence2>, Sequence2, Sequence2&>::type seq2;
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#endif

View File

@ -20,6 +20,11 @@
#include <boost/fusion/view/joint_view/detail/key_of_impl.hpp>
#include <boost/static_assert.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct joint_view_iterator_tag;
@ -49,12 +54,13 @@ namespace boost { namespace fusion
first_type first;
concat_type concat;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(joint_view_iterator& operator= (joint_view_iterator const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{

View File

@ -26,6 +26,11 @@
#include <boost/fusion/view/nview/detail/distance_impl.hpp>
#include <boost/fusion/view/nview/detail/equal_to_impl.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct nview_iterator_tag;
@ -46,13 +51,14 @@ namespace boost { namespace fusion
: seq(in_seq) {}
Sequence& seq;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(nview_iterator& operator= (nview_iterator const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{

View File

@ -18,6 +18,10 @@
#include <boost/fusion/view/repetitive_view/detail/begin_impl.hpp>
#include <boost/fusion/view/repetitive_view/detail/end_impl.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
@ -43,11 +47,12 @@ namespace boost { namespace fusion
: seq(in_seq) {}
stored_seq_type seq;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(repetitive_view& operator= (repetitive_view const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#endif

View File

@ -19,6 +19,11 @@
#include <boost/fusion/view/repetitive_view/detail/next_impl.hpp>
#include <boost/fusion/view/repetitive_view/detail/value_of_impl.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct repetitive_view_iterator_tag;
@ -46,12 +51,13 @@ namespace boost { namespace fusion
Sequence& seq;
pos_type pos;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(repetitive_view_iterator& operator= (repetitive_view_iterator const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{

View File

@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2009 Christopher Schmidt
Copyright (c) 2021-2022 Denis Mikhailov
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,6 +11,7 @@
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref_data.hpp>
#include <boost/fusion/iterator/prior.hpp>
namespace boost { namespace fusion { namespace extension
{
@ -23,14 +25,18 @@ namespace boost { namespace fusion { namespace extension
struct apply
{
typedef typename
result_of::deref_data<typename It::first_type>::type
result_of::deref_data<
typename result_of::prior<
typename It::first_type
>::type
>::type
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(It const& it)
{
return fusion::deref_data(it.first);
return fusion::deref_data(fusion::prior(it.first));
}
};
};

View File

@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2009 Christopher Schmidt
Copyright (c) 2021-2022 Denis Mikhailov
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,6 +11,7 @@
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/key_of.hpp>
#include <boost/fusion/iterator/prior.hpp>
namespace boost { namespace fusion { namespace extension
{
@ -21,8 +23,15 @@ namespace boost { namespace fusion { namespace extension
{
template <typename It>
struct apply
: result_of::key_of<typename It::it_type>
{};
{
typedef typename
result_of::key_of<
typename result_of::prior<
typename It::first_type
>::type
>::type
type;
};
};
}}}

View File

@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2009 Christopher Schmidt
Copyright (c) 2021-2022 Denis Mikhailov
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,6 +11,7 @@
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/value_of_data.hpp>
#include <boost/fusion/iterator/prior.hpp>
namespace boost { namespace fusion { namespace extension
{
@ -21,8 +23,15 @@ namespace boost { namespace fusion { namespace extension
{
template <typename It>
struct apply
: result_of::value_of_data<typename It::first_type>
{};
{
typedef typename
result_of::value_of_data<
typename result_of::prior<
typename It::first_type
>::type
>::type
type;
};
};
}}}

View File

@ -27,6 +27,11 @@
#include <boost/mpl/inherit.hpp>
#include <boost/mpl/identity.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct reverse_view_tag;
@ -60,12 +65,13 @@ namespace boost { namespace fusion
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
last_type last() const { return fusion::end(seq); }
typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(reverse_view& operator= (reverse_view const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#endif

View File

@ -24,6 +24,11 @@
#include <boost/type_traits/is_base_of.hpp>
#include <boost/static_assert.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct reverse_view_iterator_tag;
@ -47,12 +52,13 @@ namespace boost { namespace fusion
: first(converter::call(in_first)) {}
first_type first;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(reverse_view_iterator& operator= (reverse_view_iterator const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{

View File

@ -20,6 +20,11 @@
#include <boost/fusion/view/single_view/detail/value_of_impl.hpp>
#include <boost/config.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct single_view_iterator_tag;
@ -40,11 +45,13 @@ namespace boost { namespace fusion
: view(in_view) {}
SingleView& view;
BOOST_DELETED_FUNCTION(single_view_iterator& operator=(single_view_iterator const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{

View File

@ -0,0 +1,71 @@
/*=============================================================================
Copyright (c) 2022 Denis Mikhailov
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(BOOST_FUSION_TRANSFORM_VIEW_DEREF_DATA_IMPL_JAN_9_2022_0354PM)
#define BOOST_FUSION_TRANSFORM_VIEW_DEREF_DATA_IMPL_JAN_9_2022_0354PM
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/is_reference.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion
{
struct transform_view_iterator_tag;
struct transform_view_iterator2_tag;
namespace extension
{
template<typename Tag>
struct deref_data_impl;
// Unary Version
template<>
struct deref_data_impl<transform_view_iterator_tag>
{
template <typename Iterator>
struct apply
{
typedef typename
result_of::deref<typename Iterator::first_type>::type
value_type;
typedef typename Iterator::transform_type F;
typedef typename boost::result_of<F(value_type)>::type transformed_type;
typedef typename boost::remove_reference<transformed_type>::type transformed_type_unref;
typedef typename boost::remove_const<transformed_type_unref>::type transformed_type_unconst;
typedef typename transformed_type_unconst::second_type raw_type;
typedef typename
boost::mpl::if_<
is_reference<transformed_type>
, typename boost::mpl::if_<
is_const<transformed_type_unref>
, typename boost::add_reference<typename boost::add_const<raw_type>::type>::type
, typename boost::add_reference<raw_type>::type
>::type
, raw_type
>::type
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
return i.f(fusion::deref(i.first)).second;
}
};
};
// Binary Version is not supported with Associative Sequence
}
}}
#endif

View File

@ -0,0 +1,47 @@
/*=============================================================================
Copyright (c) 2022 Denis Mikhailov
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(BOOST_FUSION_TRANSFORM_VIEW_KEY_OF_IMPL_JAN_9_2022_0354PM)
#define BOOST_FUSION_TRANSFORM_VIEW_KEY_OF_IMPL_JAN_9_2022_0354PM
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion
{
struct transform_view_iterator_tag;
struct transform_view_iterator2_tag;
namespace extension
{
template<typename Tag>
struct key_of_impl;
// Unary Version
template<>
struct key_of_impl<transform_view_iterator_tag>
{
template <typename Iterator>
struct apply
{
typedef typename
result_of::deref<typename Iterator::first_type>::type
value_type;
typedef typename Iterator::transform_type F;
typedef typename boost::result_of<F(value_type)>::type transformed_type;
typedef typename boost::remove_reference<transformed_type>::type transformed_type_unref;
typedef typename boost::remove_const<transformed_type_unref>::type transformed_type_unconst;
typedef typename transformed_type_unconst::first_type type;
};
};
// Binary Version is not supported with Associative Sequence
}
}}
#endif

View File

@ -0,0 +1,47 @@
/*=============================================================================
Copyright (c) 2022 Denis Mikhailov
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(BOOST_FUSION_TRANSFORM_VIEW_VALUE_OF_IMPL_JAN_9_2022_0354PM)
#define BOOST_FUSION_TRANSFORM_VIEW_VALUE_OF_IMPL_JAN_9_2022_0354PM
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion
{
struct transform_view_iterator_tag;
struct transform_view_iterator2_tag;
namespace extension
{
template<typename Tag>
struct value_of_data_impl;
// Unary Version
template<>
struct value_of_data_impl<transform_view_iterator_tag>
{
template <typename Iterator>
struct apply
{
typedef typename
result_of::deref<typename Iterator::first_type>::type
value_type;
typedef typename Iterator::transform_type F;
typedef typename boost::result_of<F(value_type)>::type transformed_type;
typedef typename boost::remove_reference<transformed_type>::type transformed_type_unref;
typedef typename boost::remove_const<transformed_type_unref>::type transformed_type_unconst;
typedef typename transformed_type_unconst::second_type type;
};
};
// Binary Version is not supported with Associative Sequence
}
}}
#endif

View File

@ -27,6 +27,11 @@
#include <boost/fusion/sequence/intrinsic/size.hpp>
#include <boost/mpl/bool.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct void_;
@ -75,9 +80,6 @@ namespace boost { namespace fusion
transform_type f;
typename mpl::if_<traits::is_view<Sequence1>, Sequence1, Sequence1&>::type seq1;
typename mpl::if_<traits::is_view<Sequence2>, Sequence2, Sequence2&>::type seq2;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(transform_view& operator= (transform_view const&))
};
// Unary Version
@ -111,12 +113,13 @@ namespace boost { namespace fusion
last_type last() const { return fusion::end(seq); }
typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
transform_type f;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(transform_view& operator= (transform_view const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#endif

View File

@ -19,6 +19,14 @@
#include <boost/fusion/view/transform_view/detail/advance_impl.hpp>
#include <boost/fusion/view/transform_view/detail/distance_impl.hpp>
#include <boost/fusion/view/transform_view/detail/equal_to_impl.hpp>
#include <boost/fusion/view/transform_view/detail/key_of_impl.hpp>
#include <boost/fusion/view/transform_view/detail/value_of_data_impl.hpp>
#include <boost/fusion/view/transform_view/detail/deref_data_impl.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
@ -41,9 +49,6 @@ namespace boost { namespace fusion
first_type first;
transform_type f;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(transform_view_iterator& operator= (transform_view_iterator const&))
};
// Binary Version
@ -68,12 +73,13 @@ namespace boost { namespace fusion
first1_type first1;
first2_type first2;
transform_type f;
// silence MSVC warning C4512: assignment operator could not be generated
BOOST_DELETED_FUNCTION(transform_view_iterator2& operator= (transform_view_iterator2 const&))
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{