Compare commits

..

31 Commits

Author SHA1 Message Date
c740a4dbad Merge pull request #188 from boostorg/develop
Post beta merge
2018-07-17 21:12:08 +09:00
bd96a6bcfb doc: Fixed filter_view parameter requirements 2018-07-07 09:24:55 +09:00
2a95fcc3e9 Merge pull request #186 from boostorg/bugfix/apply
Fixed unintentional MPL substitution in transform_view
2018-07-07 08:11:15 +09:00
06a2f0560f doc: Fixed keyword links 2018-07-07 01:56:50 +09:00
c76cd3d6b2 test: Suppress unused warning 2018-07-07 01:27:20 +09:00
77959b1d33 test: Added test for ticket 5490 2018-07-07 01:23:11 +09:00
c6448b9e45 transform: Stopped use of mpl::apply
it causes unintended MPL substitution
2018-07-07 01:06:05 +09:00
561890429b doc: Moved paragraph to mpl adaptation to mpl section 2018-07-06 11:21:54 +09:00
23c54602c2 Merge pull request #185 from boostorg/docfix/io-for-adapted
doc: Added note regarding IO for adapted type
2018-07-05 22:57:56 +09:00
30c044b03a doc: Added note regarding IO for adapted type
[skip ci]
closes: track 6091
2018-07-05 22:15:33 +09:00
a71b9607e1 Merge pull request #184 from boostorg/develop
pre boost 1.68.0 beta merge
2018-07-03 21:50:36 +09:00
102588ae46 Merge pull request #183 from boostorg/mutable_for_each
Fixed for_each parameter type to accept mutable functor
2018-07-03 12:40:54 +09:00
0e4c5127f5 algo/for_each: Fixed parameter type
to be able to call mutable object
2018-07-02 22:19:25 +09:00
afb8b150a9 Merge pull request #181 from boostorg/init-and-paren
Fixed misused parenthesized initializer
2018-05-13 20:40:25 +09:00
d832387fdb Fixed misused parenthesized initializer 2018-05-13 18:59:43 +09:00
0c138de7cb Merge pull request #180 from boostorg/develop
Merge develop
2018-05-10 00:59:45 +09:00
7899658d8e Merge pull request #175 from boostorg/develop
Post beta merge
2018-03-25 12:58:00 +09:00
03ac9086bc Merge pull request #172 from boostorg/develop
Pre 1.67.0 beta merge - agian
2018-03-06 15:09:50 +09:00
479bc3133b Merge pull request #169 from boostorg/develop
Pre 1.67.0 beta merge
2018-02-26 01:02:16 +09:00
71ad390cf0 Merge pull request #162 from boostorg/develop
Post beta merge
2017-12-03 00:08:31 +09:00
e6b5879511 Merge pull request #157 from boostorg/develop
Merge develop to master
2017-10-31 09:40:44 +09:00
84d8afbb31 Merge pull request #147 from boostorg/develop
Develop to Master
2017-06-19 23:43:44 +09:00
715a7fb729 Merge pull request #141 from boostorg/develop
Boost 1.63.0 beta release
2016-11-01 17:03:05 +09:00
3b96c3b70b Add, and update, documentation build targets. 2016-10-10 11:39:49 -05:00
904d3c2c01 Merge pull request #131 from boostorg/develop
post 1.61.0 beta1
2016-04-02 12:44:16 +08:00
0263c75cd8 Merge pull request #125 from boostorg/develop
Release Candidate for 1.61.0.
2016-03-03 06:58:37 +08:00
53ba3de15a Merge pull request #119 from boostorg/develop
Post 1.60.0 Beta bugfixes.
2015-12-11 15:06:59 +08:00
d6c853f7ad Merge pull request #111 from boostorg/develop
1.60.0 beta
2015-10-28 07:42:24 +08:00
dc55e5e103 Merge pull request #98 from Flast/bugfix/issue-11517
Fix #11517 (for master)
2015-08-04 08:14:48 +08:00
1646a7252b Merge pull request #95 from Flast/preprocess
Regenerate preprocessed files.
2015-07-28 08:03:50 +08:00
dae9964b15 Merge pull request #93 from Flast/bugfix/issue-11140
Fix a issue with nested fusion::tuple.
2015-07-27 15:26:37 +08:00
28 changed files with 278 additions and 1435 deletions

View File

@ -23,19 +23,6 @@ various data structures, non-intrusively, as full fledged Fusion sequences.
#include <boost/fusion/adapted.hpp>
#include <boost/fusion/include/adapted.hpp>
Fusion sequences may also be adapted as fully conforming __mpl__ sequences (see
__intrinsics__). That way, we can have 2-way adaptation to and from __mpl__ and
Fusion. To make Fusion sequences fully conforming __mpl__ sequences, include:
#include <boost/fusion/mpl.hpp>
If you want bi-directional adaptation to and from __mpl__ and Fusion, simply
include:
#include <boost/fusion/include/mpl.hpp>
The header includes all the necessary headers.
[section:array Array]
This module provides adapters for arrays. Including the module
@ -145,6 +132,21 @@ header makes all __mpl__ sequences fully conforming fusion sequences.
std::cout << __at_c__<0>(v) << std::endl;
std::cout << __at_c__<1>(v) << std::endl;
[heading Bi-directional adaptation]
Fusion sequences may also be adapted as fully conforming __mpl__ sequences (see
__intrinsics__). That way, we can have 2-way adaptation to and from __mpl__ and
Fusion. To make Fusion sequences fully conforming __mpl__ sequences, include:
#include <boost/fusion/mpl.hpp>
If you want bi-directional adaptation to and from __mpl__ and Fusion, simply
include:
#include <boost/fusion/include/mpl.hpp>
The header includes all the necessary headers.
[heading See also]
__mpl__

View File

@ -1522,6 +1522,16 @@ each element. Analogously, the global `operator>>` has been overloaded
to extract __sequence__(s) from generic input streams by recursively
calling `operator>>` for each element.
Please note that, to display your adapted types via fusion IO system,
corresponding overloaded operators should be introduced to same namespace
of the type.
namespace your_awesome_library
{
using boost::fusion::operators::operator>>; // for input
using boost::fusion::operators::operator<<; // for output
...
The default delimiter between the elements is space, and the __sequence__
is enclosed in parenthesis. For Example:

View File

@ -93,10 +93,9 @@ presents only those elements for which its predicate evaluates to
[heading Template parameters]
[table
[[Parameter] [Description] [Default]]
[[`Sequence`] [A __forward_sequence__] []]
[[`Pred`] [Unary Metafunction
returning an `mpl::bool_`] []]
[[Parameter] [Description] [Default]]
[[`Sequence`] [A __forward_sequence__] []]
[[`Pred`] [A unary __mpl_lambda_expression__] []]
]
[heading Model of]
@ -271,7 +270,7 @@ defined in the implemented models.
[heading Description]
`zip_view` presents a view which iterates over a collection of __sequence__(s) in parallel. A `zip_view`
is constructed from a __sequence__ of references to the component __sequence__s.
is constructed from a __sequence__ of references to the component `__sequence__`s.
[heading Header]
@ -287,7 +286,7 @@ is constructed from a __sequence__ of references to the component __sequence__s.
[table
[[Parameter] [Description] [Default]]
[[`Sequences`] [A __forward_sequence__ of references to other Fusion __sequence__s] []]
[[`Sequences`] [A __forward_sequence__ of references to other Fusion `__sequence__`s] []]
]
[heading Model of]
@ -309,7 +308,7 @@ defined in __forward_sequence__.
[table
[[Expression] [Semantics]]
[[`ZV(s)`] [Creates a `zip_view` given a sequence of references to the component __sequence__s.]]
[[`ZV(s)`] [Creates a `zip_view` given a sequence of references to the component `__sequence__`s.]]
[[`ZV(zv1)`] [Copy constructs a `zip_view` from another `zip_view`, `zv`.]]
[[`zv1 = zv2`] [Assigns to a `zip_view`, `zv`, from another `zip_view`, `zv2`.]]
]

View File

@ -30,7 +30,7 @@ namespace detail
template <typename First, typename Last, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline void
for_each_linear(First const& first, Last const& last, F const& f, mpl::false_)
for_each_linear(First const& first, Last const& last, F& f, mpl::false_)
{
f(*first);
detail::for_each_linear(fusion::next(first), last, f,
@ -41,7 +41,7 @@ namespace detail
template <typename Sequence, typename F, typename Tag>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline void
for_each_dispatch(Sequence& seq, F const& f, Tag)
for_each_dispatch(Sequence& seq, F& f, Tag)
{
detail::for_each_linear(
fusion::begin(seq)
@ -57,7 +57,7 @@ namespace detail
{
template<typename I0, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static void call(I0 const& i0, F const& f)
static void call(I0 const& i0, F& f)
{
f(*i0);
typedef typename result_of::next<I0>::type I1;
@ -78,7 +78,7 @@ namespace detail
{
template<typename I0, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static void call(I0 const& i0, F const& f)
static void call(I0 const& i0, F& f)
{
f(*i0);
typedef typename result_of::next<I0>::type I1;
@ -95,7 +95,7 @@ namespace detail
{
template<typename I0, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static void call(I0 const& i0, F const& f)
static void call(I0 const& i0, F& f)
{
f(*i0);
typedef typename result_of::next<I0>::type I1;
@ -109,7 +109,7 @@ namespace detail
{
template<typename I0, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static void call(I0 const& i0, F const& f)
static void call(I0 const& i0, F& f)
{
f(*i0);
}
@ -128,7 +128,7 @@ namespace detail
template <typename Sequence, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline void
for_each_dispatch(Sequence& seq, F const& f, random_access_traversal_tag)
for_each_dispatch(Sequence& seq, F& f, random_access_traversal_tag)
{
typedef typename result_of::begin<Sequence>::type begin;
typedef typename result_of::end<Sequence>::type end;
@ -138,7 +138,7 @@ namespace detail
template <typename Sequence, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline void
for_each(Sequence& seq, F const& f, mpl::false_) // unsegmented implementation
for_each(Sequence& seq, F& f, mpl::false_) // unsegmented implementation
{
detail::for_each_dispatch(seq, f, typename traits::category_of<Sequence>::type());
}

View File

@ -19,11 +19,11 @@ namespace boost { namespace fusion { namespace detail
struct segmented_for_each_fun
{
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
explicit segmented_for_each_fun(Fun const& f)
explicit segmented_for_each_fun(Fun& f)
: fun(f)
{}
Fun const& fun;
Fun& fun;
template <typename Sequence, typename State, typename Context>
struct apply
@ -43,7 +43,7 @@ namespace boost { namespace fusion { namespace detail
template <typename Sequence, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline void
for_each(Sequence& seq, F const& f, mpl::true_) // segmented implementation
for_each(Sequence& seq, F& f, mpl::true_) // segmented implementation
{
fusion::segmented_fold_until(seq, void_(), segmented_for_each_fun<F>(f));
}

View File

@ -1,6 +1,7 @@
/*=============================================================================
Copyright (c) 2001-2007 Joel de Guzman
Copyright (c) 2007 Dan Marsden
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,7 @@
#include <boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp>
#include <boost/fusion/support/is_segmented.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/core/enable_if.hpp>
namespace boost { namespace fusion
{
@ -28,24 +29,16 @@ namespace boost { namespace fusion
template <typename Sequence, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
enable_if<
traits::is_sequence<Sequence>
, void
>::type
for_each(Sequence& seq, F const& f)
inline typename enable_if<traits::is_sequence<Sequence> >::type
for_each(Sequence& seq, F f)
{
detail::for_each(seq, f, typename traits::is_segmented<Sequence>::type());
}
template <typename Sequence, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
enable_if<
traits::is_sequence<Sequence>
, void
>::type
for_each(Sequence const& seq, F const& f)
inline typename enable_if<traits::is_sequence<Sequence> >::type
for_each(Sequence const& seq, F f)
{
detail::for_each(seq, f, typename traits::is_segmented<Sequence>::type());
}

View File

@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2011 Eric Niebler
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,7 @@
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/core/enable_if.hpp>
namespace boost { namespace fusion
{
@ -21,21 +22,13 @@ namespace boost { namespace fusion
template <typename Sequence, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
enable_if<
traits::is_sequence<Sequence>
, void
>::type
for_each(Sequence& seq, F const& f);
inline typename enable_if<traits::is_sequence<Sequence> >::type
for_each(Sequence& seq, F f);
template <typename Sequence, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
enable_if<
traits::is_sequence<Sequence>
, void
>::type
for_each(Sequence const& seq, F const& f);
inline typename enable_if<traits::is_sequence<Sequence> >::type
for_each(Sequence const& seq, F f);
}}
#endif

View File

@ -26,7 +26,6 @@
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/fusion/support/detail/and.hpp>
#include <boost/fusion/support/detail/index_sequence.hpp>
#include <boost/fusion/support/detail/propagate_trivialness.hpp>
#include <boost/fusion/container/vector/detail/at_impl.hpp>
#include <boost/fusion/container/vector/detail/value_at_impl.hpp>
#include <boost/fusion/container/vector/detail/begin_impl.hpp>
@ -51,6 +50,8 @@ namespace boost { namespace fusion
namespace vector_detail
{
struct each_elem {};
template <
typename This, typename T, typename T_, std::size_t Size, bool IsSeq
>
@ -130,6 +131,32 @@ namespace boost { namespace fusion
: elem() // value-initialized explicitly
{}
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
store(store const& rhs)
: elem(rhs.elem)
{}
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
store&
operator=(store const& rhs)
{
elem = rhs.elem;
return *this;
}
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
store(store&& rhs)
: elem(static_cast<T&&>(rhs.elem))
{}
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
store&
operator=(store&& rhs)
{
elem = static_cast<T&&>(rhs.elem);
return *this;
}
template <
typename U
, typename = typename boost::disable_if<
@ -151,7 +178,6 @@ namespace boost { namespace fusion
struct vector_data<detail::index_sequence<I...>, T...>
: store<I, T>...
, sequence_base<vector_data<detail::index_sequence<I...>, T...> >
, private detail::propagate_trivialness<T...>
{
typedef vector_tag fusion_tag;
typedef fusion_sequence_tag tag; // this gets picked up by MPL
@ -172,14 +198,14 @@ namespace boost { namespace fusion
>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
explicit
vector_data(Sequence&& rhs)
vector_data(each_elem, Sequence&& rhs)
: store<I, T>(forward_at_c<I>(std::forward<Sequence>(rhs)))...
{}
template <typename ...U>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
explicit
vector_data(U&&... var)
vector_data(each_elem, U&&... var)
: store<I, T>(std::forward<U>(var))...
{}
@ -264,7 +290,7 @@ namespace boost { namespace fusion
// In the (near) future release, should be fixed.
/* BOOST_CONSTEXPR */ BOOST_FUSION_GPU_ENABLED
explicit vector(U&&... u)
: base(std::forward<U>(u)...)
: base(vector_detail::each_elem(), std::forward<U>(u)...)
{}
template <
@ -277,7 +303,7 @@ namespace boost { namespace fusion
>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
vector(Sequence&& seq)
: base(std::forward<Sequence>(seq))
: base(vector_detail::each_elem(), std::forward<Sequence>(seq))
{}
template <typename Sequence>

View File

@ -116,11 +116,4 @@ namespace std
# define BOOST_FUSION_NOEXCEPT_ON_DEFAULTED BOOST_NOEXCEPT
#endif
#ifdef __has_extension
# define BOOST_FUSION_HAS_EXTENSION __has_extension
#else
# define BOOST_FUSION_HAS_EXTENSION(_) 0
#endif
#endif

View File

@ -1,113 +0,0 @@
/*=============================================================================
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_SUPPORT_DETAIL_IS_TRIVIALLY_COPYABLE
#define BOOST_FUSION_SUPPORT_DETAIL_IS_TRIVIALLY_COPYABLE
#include <boost/fusion/support/config.hpp>
#if BOOST_WORKAROUND(BOOST_GCC, BOOST_TESTED_AT(90000))
// GCC treats volatile qualified scalar type as non trivially copyable,
// so to be fail safe, we also treat it as non trivially copyable type.
// http://wg21.link/cwg2094
// https://gcc.gnu.org/PR85679
//
// Some version of clang also tweats volatile qualified scalar type as
// non trivially copyable type, but all of known the versions what
// behaves as CWG 496 but not CWG 2094 implement builtin.
// So we don't have to emulate CWG 496 on clang.
# define BOOST_FUSION_DETAIL_VOLATILE_SCALAR_IS_NON_TRIVIALLY_COPYABLE
#endif
#if BOOST_FUSION_HAS_EXTENSION(is_trivially_copyable) || \
(50000 <= BOOST_GCC) || (1700 <= BOOST_MSVC)
# define BOOST_FUSION_IS_TRIVIALLY_COPYABLE __is_trivially_copyable
#endif
#if defined(BOOST_FUSION_IS_TRIVIALLY_COPYABLE)
# define BOOST_FUSION_DETAIL_IS_TRIVIALLY_COPYABLE_CONFORMING 2
# include <boost/mpl/bool.hpp>
#elif !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
# define BOOST_FUSION_DETAIL_IS_TRIVIALLY_COPYABLE_CONFORMING 2
# include <type_traits>
#else
# include <boost/config/workaround.hpp>
# include <boost/mpl/bool.hpp>
# include <boost/mpl/if.hpp>
# include <boost/type_traits/remove_cv.hpp>
# include <boost/type_traits/remove_all_extents.hpp>
# include <boost/type_traits/is_scalar.hpp>
# include <boost/type_traits/is_class.hpp>
# include <boost/type_traits/is_union.hpp>
# include <boost/type_traits/is_constructible.hpp>
# include <boost/type_traits/is_assignable.hpp>
# include <boost/type_traits/is_copy_constructible.hpp>
# include <boost/type_traits/is_copy_assignable.hpp>
# include <boost/type_traits/has_trivial_assign.hpp>
# include <boost/type_traits/has_trivial_copy.hpp>
# include <boost/type_traits/has_trivial_destructor.hpp>
# include <boost/type_traits/has_trivial_move_assign.hpp>
# include <boost/type_traits/has_trivial_move_constructor.hpp>
#ifdef BOOST_FUSION_DETAIL_VOLATILE_SCALAR_IS_NON_TRIVIALLY_COPYABLE
# include <boost/mpl/not.hpp>
# include <boost/type_traits/is_volatile.hpp>
#endif
#endif // <type_traits>
namespace boost { namespace fusion { namespace detail
{
#ifndef BOOST_FUSION_DETAIL_IS_TRIVIALLY_COPYABLE_CONFORMING
#if defined(BOOST_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_DECLTYPE) && \
defined(BOOST_IS_UNION) && defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) && \
defined(BOOST_HAS_TRIVIAL_ASSIGN) && defined(BOOST_HAS_TRIVIAL_COPY) && \
defined(BOOST_HAS_TRIVIAL_MOVE_ASSIGN) && defined(BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR) && \
defined(BOOST_HAS_TRIVIAL_DESTRUCTOR) && defined(BOOST_TT_IS_CONSTRUCTIBLE_CONFORMING)
# define BOOST_FUSION_DETAIL_IS_TRIVIALLY_COPYABLE_CONFORMING 1
#endif
template <typename T>
struct is_trivially_copyable_class
: mpl::bool_<
(has_trivial_copy<T>::value || !is_copy_constructible<T>::value) &&
(has_trivial_assign<T>::value || !is_copy_assignable<T>::value) &&
(has_trivial_move_constructor<T>::value || !is_constructible<T, T>::value) &&
(has_trivial_move_assign<T>::value || !is_assignable<T, T>::value) &&
(is_copy_constructible<T>::value || is_copy_assignable<T>::value ||
is_constructible<T, T>::value || is_assignable<T, T>::value) &&
has_trivial_destructor<T>::value
> { };
template <typename T>
struct is_trivially_copyable_impl
: mpl::if_c<is_scalar<T>::value
#ifdef BOOST_FUSION_DETAIL_VOLATILE_SCALAR_IS_NON_TRIVIALLY_COPYABLE
, mpl::not_<is_volatile<T> >
#else
, mpl::true_
#endif
, typename mpl::if_c<is_class<T>::value || is_union<T>::value
, is_trivially_copyable_class<typename remove_cv<T>::type>
, mpl::false_
>::type
>::type { };
#endif // <type_traits>
template <typename T>
struct is_trivially_copyable
#if defined(BOOST_FUSION_IS_TRIVIALLY_COPYABLE)
: mpl::bool_<BOOST_FUSION_IS_TRIVIALLY_COPYABLE(T)>
#elif !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
: std::is_trivially_copyable<T>
#else
: is_trivially_copyable_impl<typename remove_all_extents<T>::type>
#endif // <type_traits>
{ };
}}} // namespace boost::fusion::detail
#endif

View File

@ -1,40 +0,0 @@
/*=============================================================================
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_SUPPORT_DETAIL_PROPAGATE_TRIVIALNESS
#define BOOST_FUSION_SUPPORT_DETAIL_PROPAGATE_TRIVIALNESS
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/and.hpp>
#include <boost/fusion/support/detail/is_trivially_copyable.hpp>
#include <boost/mpl/if.hpp>
namespace boost { namespace fusion { namespace detail
{
struct trivial_base { };
struct non_trivial_base
{
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
BOOST_DEFAULTED_FUNCTION(non_trivial_base(), {})
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
non_trivial_base(non_trivial_base const&) BOOST_NOEXCEPT { }
};
template <typename... T>
struct propagate_trivialness
: mpl::if_c<and_<is_trivially_copyable<T>...>::value
, trivial_base
, non_trivial_base
>::type
{ };
}}} // namespace boost::fusion::detail
#endif

View File

@ -56,7 +56,7 @@ namespace boost { namespace fusion
>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
tuple(tuple<U...> const& other)
: base(other) {}
: base(vector_detail::each_elem(), other) {}
template <
typename ...U
@ -66,7 +66,7 @@ namespace boost { namespace fusion
>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
tuple(tuple<U...>&& other)
: base(std::move(other)) {}
: base(vector_detail::each_elem(), std::move(other)) {}
template <
typename ...U
@ -78,17 +78,17 @@ namespace boost { namespace fusion
/*BOOST_CONSTEXPR*/ BOOST_FUSION_GPU_ENABLED
explicit
tuple(U&&... args)
: base(std::forward<U>(args)...) {}
: base(vector_detail::each_elem(), std::forward<U>(args)...) {}
template<typename U1, typename U2>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
tuple(std::pair<U1, U2> const& other)
: base(other.first, other.second) {}
: base(vector_detail::each_elem(), other.first, other.second) {}
template<typename U1, typename U2>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
tuple(std::pair<U1, U2>&& other)
: base(std::move(other.first), std::move(other.second)) {}
: base(vector_detail::each_elem(), std::move(other.first), std::move(other.second)) {}
template<typename U>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED

View File

@ -1,38 +0,0 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2007 Dan Marsden
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_APPLY_TRANSFORM_RESULT_02092006_1936)
#define BOOST_FUSION_APPLY_TRANSFORM_RESULT_02092006_1936
#include <boost/fusion/support/config.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion
{
struct void_;
namespace detail
{
template <typename F>
struct apply_transform_result
{
template <typename T0, typename T1 = void_>
struct apply
: boost::result_of<F(T0, T1)>
{};
template <typename T0>
struct apply<T0, void_>
: boost::result_of<F(T0)>
{};
};
}
}}
#endif

View File

@ -1,6 +1,7 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 Dan Marsden
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,9 +10,8 @@
#define BOOST_FUSION_AT_IMPL_20061029_1946
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion {
struct transform_view_tag;
@ -29,9 +29,8 @@ namespace boost { namespace fusion {
struct apply
{
typedef typename Seq::transform_type F;
typedef detail::apply_transform_result<F> transform_type;
typedef typename boost::fusion::result_of::at<typename Seq::sequence_type, N>::type value_type;
typedef typename mpl::apply<transform_type, value_type>::type type;
typedef typename result_of::at<typename Seq::sequence_type, N>::type value_type;
typedef typename boost::result_of<F(value_type)>::type type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type call(Seq& seq)
@ -48,10 +47,9 @@ namespace boost { namespace fusion {
struct apply
{
typedef typename Seq::transform_type F;
typedef detail::apply_transform_result<F> transform_type;
typedef typename boost::fusion::result_of::at<typename Seq::sequence1_type, N>::type value1_type;
typedef typename boost::fusion::result_of::at<typename Seq::sequence2_type, N>::type value2_type;
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
typedef typename result_of::at<typename Seq::sequence1_type, N>::type value1_type;
typedef typename result_of::at<typename Seq::sequence2_type, N>::type value2_type;
typedef typename boost::result_of<F(value1_type, value2_type)>::type type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type call(Seq& seq)

View File

@ -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,10 +9,8 @@
#define FUSION_DEREF_IMPL_07162005_1026
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion
{
@ -34,8 +33,8 @@ namespace boost { namespace fusion
result_of::deref<typename Iterator::first_type>::type
value_type;
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
typedef typename mpl::apply<transform_type, value_type>::type type;
typedef typename Iterator::transform_type F;
typedef typename boost::result_of<F(value_type)>::type type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
@ -60,8 +59,8 @@ namespace boost { namespace fusion
result_of::deref<typename Iterator::first2_type>::type
value2_type;
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
typedef typename Iterator::transform_type F;
typedef typename boost::result_of<F(value1_type, value2_type)>::type type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
@ -70,7 +69,7 @@ namespace boost { namespace fusion
return i.f(*i.first1, *i.first2);
}
};
};
};
}
}}

View File

@ -1,6 +1,7 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 Dan Marsden
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,9 +10,8 @@
#define BOOST_FUSION_VALUE_AT_IMPL_20061101_0745
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
#include <boost/fusion/sequence/intrinsic/value_at.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion {
struct transform_view_tag;
@ -29,9 +29,8 @@ namespace boost { namespace fusion {
struct apply
{
typedef typename Seq::transform_type F;
typedef detail::apply_transform_result<F> transform_type;
typedef typename boost::fusion::result_of::value_at<typename Seq::sequence_type, N>::type value_type;
typedef typename mpl::apply<transform_type, value_type>::type type;
typedef typename result_of::value_at<typename Seq::sequence_type, N>::type value_type;
typedef typename boost::result_of<F(value_type)>::type type;
};
};
@ -42,10 +41,9 @@ namespace boost { namespace fusion {
struct apply
{
typedef typename Seq::transform_type F;
typedef detail::apply_transform_result<F> transform_type;
typedef typename boost::fusion::result_of::value_at<typename Seq::sequence1_type, N>::type value1_type;
typedef typename boost::fusion::result_of::value_at<typename Seq::sequence2_type, N>::type value2_type;
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
typedef typename result_of::value_at<typename Seq::sequence1_type, N>::type value1_type;
typedef typename result_of::value_at<typename Seq::sequence2_type, N>::type value2_type;
typedef typename boost::result_of<F(value1_type, value2_type)>::type type;
};
};
}

View File

@ -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,9 +9,8 @@
#define FUSION_VALUE_OF_IMPL_07162005_1030
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion
{
@ -33,8 +33,8 @@ namespace boost { namespace fusion
result_of::value_of<typename Iterator::first_type>::type
value_type;
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
typedef typename mpl::apply<transform_type, value_type>::type type;
typedef typename Iterator::transform_type F;
typedef typename boost::result_of<F(value_type)>::type type;
};
};
@ -52,8 +52,8 @@ namespace boost { namespace fusion
result_of::value_of<typename Iterator::first2_type>::type
value2_type;
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
typedef typename Iterator::transform_type F;
typedef typename boost::result_of<F(value1_type, value2_type)>::type type;
};
};
}

View File

@ -66,6 +66,7 @@ project
[ run algorithm/zip2.cpp ]
[ run algorithm/zip_ignore.cpp ]
[ run algorithm/flatten.cpp ]
[ compile algorithm/ticket-5490.cpp ]
[ run sequence/as_deque.cpp ]
[ run sequence/as_list.cpp ]
@ -154,8 +155,6 @@ project
[ run sequence/tuple_traits.cpp : :
: <define>BOOST_FUSION_DISABLE_VARIADIC_VECTOR
: tuple_traits__no_variadic ]
[ run sequence/tuple_trivially_copyable.cpp : :
: [ requires cxx11_variadic_templates ] ]
[ run sequence/transform_view.cpp ]
[ run sequence/vector_comparison.cpp ]
[ run sequence/vector_construction.cpp ]
@ -177,8 +176,6 @@ project
[ run sequence/vector_traits.cpp : :
: <define>BOOST_FUSION_DISABLE_VARIADIC_VECTOR
: vector_traits__no_variadic ]
[ run sequence/vector_trivially_copyable.cpp : :
: [ requires cxx11_variadic_templates ] ]
[ run sequence/vector_value_at.cpp ]
[ run sequence/zip_view.cpp ]
[ run sequence/zip_view2.cpp ]
@ -272,9 +269,6 @@ project
: [ requires cxx11_variadic_templates ] ]
[ compile support/tag_of.cpp ]
[ compile support/unused.cpp ]
[ compile support/is_trivially_copyable.cpp ]
[ compile support/propagate_trivialness.cpp
: [ requires cxx11_variadic_templates ] ]
# [ compile-fail xxx.cpp ]

View File

@ -1,13 +1,15 @@
/*=============================================================================
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)
==============================================================================*/
#include <boost/detail/lightweight_test.hpp>
#include <boost/core/lightweight_test.hpp>
#include <boost/fusion/container/vector/vector.hpp>
#include <boost/fusion/adapted/mpl.hpp>
#include <boost/fusion/sequence/io/out.hpp>
#include <boost/fusion/sequence/comparison/equal_to.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/mpl/vector_c.hpp>
@ -29,6 +31,15 @@ struct increment
}
};
struct mutable_increment : increment
{
template <typename T>
void operator()(T& v)
{
return increment::operator()(v);
}
};
int
main()
{
@ -44,9 +55,20 @@ main()
}
{
char const ruby[] = "Ruby";
typedef vector<int, char, double, char const*> vector_type;
vector_type v(1, 'x', 3.3, "Ruby");
vector_type v(1, 'x', 3.3, ruby);
for_each(v, increment());
BOOST_TEST_EQ(v, vector_type(2, 'y', 4.3, ruby + 1));
std::cout << v << std::endl;
}
{
char const ruby[] = "Ruby";
typedef vector<int, char, double, char const*> vector_type;
vector_type v(1, 'x', 3.3, ruby);
for_each(v, mutable_increment());
BOOST_TEST_EQ(v, vector_type(2, 'y', 4.3, ruby + 1));
std::cout << v << std::endl;
}

View File

@ -1,14 +1,17 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2011 Eric Niebler
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)
==============================================================================*/
#include <boost/detail/lightweight_test.hpp>
#include <boost/core/lightweight_test.hpp>
#include <boost/fusion/container/vector/vector.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/fusion/container/generation/make_vector.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/fusion/sequence/comparison/equal_to.hpp>
#include <boost/fusion/sequence/io/out.hpp>
#include "../sequence/tree.hpp"
struct print
@ -20,6 +23,31 @@ struct print
}
};
struct increment
{
template <typename T>
void operator()(T& v) const
{
++v;
}
};
struct mutable_increment : increment
{
template <typename T>
void operator()(T& v)
{
return increment::operator()(v);
}
};
template <typename F, typename Tree>
void test(Tree tree, Tree const& expected)
{
boost::fusion::for_each(tree, F());
BOOST_TEST_EQ(tree, expected);
}
int
main()
{
@ -42,6 +70,69 @@ main()
)
, print()
);
std::cout << std::endl;
}
{
test<increment>(
make_tree(
make_vector(double(0),'B')
, make_tree(
make_vector(1,2,long(3))
, make_tree(make_vector('a','b','c'))
, make_tree(make_vector(short('d'),'e','f'))
)
, make_tree(
make_vector(4,5,6)
, make_tree(make_vector(float(1),'h','i'))
, make_tree(make_vector('j','k','l'))
)
)
, make_tree(
make_vector(double(1),'C')
, make_tree(
make_vector(2,3,long(4))
, make_tree(make_vector('b','c','d'))
, make_tree(make_vector(short('e'),'f','g'))
)
, make_tree(
make_vector(5,6,7)
, make_tree(make_vector(float(2),'i','j'))
, make_tree(make_vector('k','l','m'))
)
)
);
}
{
test<mutable_increment>(
make_tree(
make_vector(double(0),'B')
, make_tree(
make_vector(1,2,long(3))
, make_tree(make_vector('a','b','c'))
, make_tree(make_vector(short('d'),'e','f'))
)
, make_tree(
make_vector(4,5,6)
, make_tree(make_vector(float(1),'h','i'))
, make_tree(make_vector('j','k','l'))
)
)
, make_tree(
make_vector(double(1),'C')
, make_tree(
make_vector(2,3,long(4))
, make_tree(make_vector('b','c','d'))
, make_tree(make_vector(short('e'),'f','g'))
)
, make_tree(
make_vector(5,6,7)
, make_tree(make_vector(float(2),'i','j'))
, make_tree(make_vector('k','l','m'))
)
)
);
}
return boost::report_errors();

View File

@ -0,0 +1,41 @@
/*=============================================================================
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)
==============================================================================*/
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/include/transform.hpp>
#include <boost/mpl/quote.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/core/ignore_unused.hpp>
using namespace boost::fusion;
template <typename>
struct predicate {};
struct unique {};
template <typename>
struct meta_func
{
typedef unique result_type;
template <typename T>
unique operator()(const T&) const;
};
int main()
{
vector<int> v;
typedef predicate<boost::mpl::_1> lambda_t;
typedef boost::mpl::quote1<predicate> quote_t;
vector<unique> l = transform(v, meta_func<lambda_t>());
vector<unique> q = transform(v, meta_func<quote_t>());
boost::ignore_unused(l, q);
}

View File

@ -1,76 +0,0 @@
/*=============================================================================
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 TRIVIALLY_COPYABLE_HPP
#define TRIVIALLY_COPYABLE_HPP
#include <boost/fusion/support/detail/is_trivially_copyable.hpp>
#include <boost/mpl/assert.hpp>
#include "../support/trivial.hpp"
using namespace boost::fusion;
BOOST_FUSION_ASSERT_CWG496((detail::is_trivially_copyable<FUSION_SEQUENCE<> >));
BOOST_FUSION_ASSERT_CWG496((detail::is_trivially_copyable<FUSION_SEQUENCE<int> >));
BOOST_FUSION_ASSERT_CWG496((detail::is_trivially_copyable<FUSION_SEQUENCE<int, int> >));
BOOST_FUSION_ASSERT_CWG496((detail::is_trivially_copyable<FUSION_SEQUENCE<int, int, int> >));
BOOST_MPL_ASSERT_NOT((detail::is_trivially_copyable<FUSION_SEQUENCE<int&> >));
BOOST_MPL_ASSERT_NOT((detail::is_trivially_copyable<FUSION_SEQUENCE<int, int&> >));
BOOST_MPL_ASSERT_NOT((detail::is_trivially_copyable<FUSION_SEQUENCE<int, int, int&> >));
BOOST_FUSION_ASSERT_CWG496((detail::is_trivially_copyable<FUSION_SEQUENCE<FUSION_SEQUENCE<> > >));
BOOST_FUSION_ASSERT_CWG496((detail::is_trivially_copyable<FUSION_SEQUENCE<FUSION_SEQUENCE<int> > >));
BOOST_FUSION_ASSERT_CWG496((detail::is_trivially_copyable<FUSION_SEQUENCE<FUSION_SEQUENCE<int>, FUSION_SEQUENCE<int, int> > >));
BOOST_FUSION_ASSERT_CWG496((detail::is_trivially_copyable<FUSION_SEQUENCE<FUSION_SEQUENCE<int>, FUSION_SEQUENCE<int, int>, FUSION_SEQUENCE<int, int, int> > >));
BOOST_FUSION_ASSERT_CWG496((detail::is_trivially_copyable<FUSION_SEQUENCE<int, trivial> >));
BOOST_MPL_ASSERT_NOT((detail::is_trivially_copyable<FUSION_SEQUENCE<int, user_provided_copy> >));
BOOST_MPL_ASSERT_NOT((detail::is_trivially_copyable<FUSION_SEQUENCE<int, user_provided_move> >));
BOOST_MPL_ASSERT_NOT((detail::is_trivially_copyable<FUSION_SEQUENCE<int, user_provided_dtor> >));
#ifdef BOOST_FUSION_DETAIL_IS_TRIVIALLY_COPYABLE_CONFORMING
#include <boost/core/lightweight_test.hpp>
#include <boost/core/addressof.hpp>
#include <boost/fusion/sequence/intrinsic/at_c.hpp>
#include <boost/fusion/sequence/comparison/equal_to.hpp>
#include <cstring>
int main()
{
typedef FUSION_SEQUENCE<char, double, const int*> seq_t;
BOOST_MPL_ASSERT((detail::is_trivially_copyable<seq_t>));
char* storage = new char[sizeof(seq_t)];
int i = 42;
const seq_t* src = new seq_t('\t', 3.14159265359, &i);
std::memcpy(static_cast<void*>(storage), src, sizeof(seq_t));
seq_t* dst = new seq_t;
std::memcpy(dst, static_cast<void const*>(storage), sizeof(seq_t));
BOOST_TEST((*src) == (*dst));
BOOST_TEST(boost::fusion::at_c<0>(*src) == '\t');
BOOST_TEST(boost::fusion::at_c<1>(*src) == 3.14159265359);
BOOST_TEST(boost::fusion::at_c<2>(*src) == &i);
BOOST_TEST(*boost::fusion::at_c<2>(*src) == 42);
BOOST_TEST(boost::fusion::at_c<0>(*dst) == '\t');
BOOST_TEST(boost::fusion::at_c<1>(*dst) == 3.14159265359);
BOOST_TEST(boost::fusion::at_c<2>(*dst) == &i);
BOOST_TEST(*boost::fusion::at_c<2>(*dst) == 42);
delete dst;
delete src;
delete [] storage;
return boost::report_errors();
}
#else
int main() { }
#endif
#endif

View File

@ -1,17 +0,0 @@
/*=============================================================================
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)
==============================================================================*/
#include <boost/fusion/tuple/tuple_fwd.hpp>
#ifndef BOOST_FUSION_HAS_VARIADIC_TUPLE
int main() { }
#else
#include <boost/fusion/tuple/tuple.hpp>
#define FUSION_SEQUENCE boost::fusion::tuple
#include "trivially_copyable.hpp"
#endif

View File

@ -1,17 +0,0 @@
/*=============================================================================
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)
==============================================================================*/
#include <boost/fusion/container/vector/detail/config.hpp>
#ifndef BOOST_FUSION_HAS_VARIADIC_VECTOR
int main() { }
#else
#include <boost/fusion/container/vector/vector.hpp>
#define FUSION_SEQUENCE boost::fusion::vector
#include "trivially_copyable.hpp"
#endif

View File

@ -1,766 +0,0 @@
/*=============================================================================
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)
==============================================================================*/
#include <boost/config.hpp>
#include <boost/fusion/support/detail/is_trivially_copyable.hpp>
#include <boost/mpl/assert.hpp>
#include "trivial.hpp"
using namespace boost;
using namespace boost::fusion::detail;
// disable cv-qialifer on function type warning
#if defined(BOOST_CLANG)
# pragma clang diagnostic ignored "-Wignored-qualifiers"
#elif defined(BOOST_MSVC)
# pragma warning(disable: 4180)
#endif
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<void>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<void const>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<void volatile>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<void const volatile>));
BOOST_MPL_ASSERT((is_trivially_copyable<int>));
BOOST_MPL_ASSERT((is_trivially_copyable<int const>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int volatile>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int const volatile>));
BOOST_MPL_ASSERT((is_trivially_copyable<int*>));
BOOST_MPL_ASSERT((is_trivially_copyable<int const*>));
BOOST_MPL_ASSERT((is_trivially_copyable<int volatile*>));
BOOST_MPL_ASSERT((is_trivially_copyable<int const volatile*>));
BOOST_MPL_ASSERT((is_trivially_copyable<int* const>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int* volatile>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int* const volatile>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int volatile&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const volatile&>));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int volatile&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const volatile&&>));
#endif
BOOST_MPL_ASSERT((is_trivially_copyable<int[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int const[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int volatile[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int const volatile[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int const[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int volatile[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int const volatile[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int const[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int volatile[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int const volatile[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int const(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int const volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int(*const)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int(*volatile)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int(*const volatile)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int const(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int const volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int(*const)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int(*volatile)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int(*const volatile)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int const(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int const volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<int(*const)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int(*volatile)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<int(*const volatile)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int volatile(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const volatile(&)[][3][4][5]>));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int volatile(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<int const volatile(&&)[][3][4][5]>));
#endif
typedef int function_type();
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type volatile>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const volatile>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type*>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const*>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type volatile*>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const volatile*>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type* const>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type* volatile>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type* const volatile>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type volatile&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const volatile&>));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type volatile&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const volatile&&>));
#endif
BOOST_MPL_ASSERT((is_trivially_copyable<function_type*[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const*[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type volatile*[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const volatile*[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type* const[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type* volatile[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type* const volatile[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type*[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const*[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type volatile*[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const volatile*[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type* const[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type* volatile[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type* const volatile[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type*[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const*[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type volatile*[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const volatile*[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type* const[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type* volatile[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type* const volatile[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type*(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const*(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type volatile*(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const volatile*(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type*(*const)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type*(*volatile)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type*(*const volatile)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type*(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const*(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type volatile*(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const volatile*(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type*(*const)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type*(*volatile)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type*(*const volatile)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type*(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const*(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type volatile*(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type const volatile*(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<function_type*(*const)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type*(*volatile)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<function_type*(*const volatile)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type*(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const*(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type volatile*(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const volatile*(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type*(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const*(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type volatile*(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const volatile*(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type*(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const*(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type volatile*(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const volatile*(&)[][3][4][5]>));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type*(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const*(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type volatile*(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const volatile*(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type*(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const*(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type volatile*(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const volatile*(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type*(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const*(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type volatile*(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<function_type const volatile*(&&)[][3][4][5]>));
#endif
BOOST_MPL_ASSERT((is_trivially_copyable<member_type>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type const>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type volatile>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type const volatile>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type const[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type volatile[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type const volatile[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type const[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type volatile[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type const volatile[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type const[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type volatile[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type const volatile[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type const(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type const volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type(*const)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type(*volatile)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type(*const volatile)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type const(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type const volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type(*const)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type(*volatile)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type(*const volatile)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type const(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type const volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_type(*const)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type(*volatile)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_type(*const volatile)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type const(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type const volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type const(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type const volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type const(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type volatile(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type const volatile(&)[][3][4][5]>));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type const(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type const volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type const(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type const volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type const(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type volatile(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_type const volatile(&&)[][3][4][5]>));
#endif
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type const>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type volatile>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type const volatile>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type const[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type volatile[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type const volatile[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type const[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type volatile[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type const volatile[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type const[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type volatile[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type const volatile[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type const(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type const volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type(*const)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type(*volatile)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type(*const volatile)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type const(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type const volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type(*const)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type(*volatile)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type(*const volatile)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type const(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type const volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<member_function_type(*const)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type(*volatile)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<member_function_type(*const volatile)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type const(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type const volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type const(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type const volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type const(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type volatile(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type const volatile(&)[][3][4][5]>));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type const(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type const volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type const(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type const volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type const(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type volatile(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<member_function_type const volatile(&&)[][3][4][5]>));
#endif
BOOST_FUSION_ASSERT_CWG496((is_trivially_copyable<trivial>));
BOOST_FUSION_ASSERT_CWG496((is_trivially_copyable<trivial const>));
BOOST_FUSION_ASSERT_CWG2094((is_trivially_copyable<trivial volatile>));
BOOST_FUSION_ASSERT_CWG2094((is_trivially_copyable<trivial const volatile>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial*>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial const*>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial volatile*>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial const volatile*>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial* const>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<trivial* volatile>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<trivial* const volatile>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial volatile&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const volatile&>));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial volatile&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const volatile&&>));
#endif
BOOST_FUSION_ASSERT_CWG496((is_trivially_copyable<trivial[]>));
BOOST_FUSION_ASSERT_CWG496((is_trivially_copyable<trivial const[]>));
BOOST_FUSION_ASSERT_CWG2094((is_trivially_copyable<trivial volatile[]>));
BOOST_FUSION_ASSERT_CWG2094((is_trivially_copyable<trivial const volatile[]>));
BOOST_FUSION_ASSERT_CWG496((is_trivially_copyable<trivial[3]>));
BOOST_FUSION_ASSERT_CWG496((is_trivially_copyable<trivial const[3]>));
BOOST_FUSION_ASSERT_CWG2094((is_trivially_copyable<trivial volatile[3]>));
BOOST_FUSION_ASSERT_CWG2094((is_trivially_copyable<trivial const volatile[3]>));
BOOST_FUSION_ASSERT_CWG496((is_trivially_copyable<trivial[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496((is_trivially_copyable<trivial const[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG2094((is_trivially_copyable<trivial volatile[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG2094((is_trivially_copyable<trivial const volatile[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial const(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial const volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial(*const)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<trivial(*volatile)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<trivial(*const volatile)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial const(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial const volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial(*const)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<trivial(*volatile)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<trivial(*const volatile)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial const(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial const volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<trivial(*const)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<trivial(*volatile)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<trivial(*const volatile)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial volatile(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const volatile(&)[][3][4][5]>));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial volatile(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<trivial const volatile(&&)[][3][4][5]>));
#endif
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy volatile>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const volatile>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy*>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy const*>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy volatile*>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy const volatile*>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy* const>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_copy* volatile>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_copy* const volatile>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy volatile&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const volatile&>));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy volatile&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const volatile&&>));
#endif
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy volatile[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const volatile[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy volatile[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const volatile[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy volatile[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const volatile[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy const(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy const volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy(*const)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_copy(*volatile)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_copy(*const volatile)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy const(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy const volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy(*const)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_copy(*volatile)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_copy(*const volatile)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy const(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy const volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_copy(*const)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_copy(*volatile)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_copy(*const volatile)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy volatile(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const volatile(&)[][3][4][5]>));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy volatile(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_copy const volatile(&&)[][3][4][5]>));
#endif
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move volatile>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const volatile>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move*>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move const*>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move volatile*>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move const volatile*>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move* const>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_move* volatile>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_move* const volatile>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move volatile&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const volatile&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move volatile&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const volatile&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move volatile[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const volatile[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move volatile[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const volatile[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move volatile[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const volatile[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move const(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move const volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move(*const)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_move(*volatile)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_move(*const volatile)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move const(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move const volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move(*const)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_move(*volatile)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_move(*const volatile)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move const(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move const volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_move(*const)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_move(*volatile)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_move(*const volatile)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move volatile(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const volatile(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move volatile(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_move const volatile(&&)[][3][4][5]>));
#endif
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor volatile>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const volatile>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor*>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor const*>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor volatile*>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor const volatile*>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor* const>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_dtor* volatile>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_dtor* const volatile>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor volatile&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const volatile&>));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor volatile&&>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const volatile&&>));
#endif
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor volatile[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const volatile[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor volatile[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const volatile[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor volatile[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const volatile[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor const(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor const volatile(*)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor(*const)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_dtor(*volatile)[]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_dtor(*const volatile)[]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor const(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor const volatile(*)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor(*const)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_dtor(*volatile)[3]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_dtor(*const volatile)[3]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor const(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor const volatile(*)[][3][4][5]>));
BOOST_MPL_ASSERT((is_trivially_copyable<user_provided_dtor(*const)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_dtor(*volatile)[][3][4][5]>));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_trivially_copyable<user_provided_dtor(*const volatile)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const volatile(&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const volatile(&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor volatile(&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const volatile(&)[][3][4][5]>));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const volatile(&&)[]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const volatile(&&)[3]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor volatile(&&)[][3][4][5]>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<user_provided_dtor const volatile(&&)[][3][4][5]>));
#endif

View File

@ -1,183 +0,0 @@
/*=============================================================================
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)
==============================================================================*/
#include <boost/config.hpp>
#include <boost/fusion/support/detail/propagate_trivialness.hpp>
#include <boost/fusion/support/detail/is_trivially_copyable.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/type_traits/is_convertible.hpp>
#include <boost/type_traits/is_base_of.hpp>
#include <boost/type_traits/is_default_constructible.hpp>
#include "trivial.hpp"
using namespace boost;
using namespace boost::fusion::detail;
BOOST_MPL_ASSERT((is_default_constructible<trivial_base>));
BOOST_MPL_ASSERT((is_default_constructible<non_trivial_base>));
BOOST_FUSION_ASSERT_CWG496((is_trivially_copyable<trivial_base>));
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<non_trivial_base>));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<int> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<int const> >));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_base_of<trivial_base, propagate_trivialness<int volatile> >));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_base_of<trivial_base, propagate_trivialness<int const volatile> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<int*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<int const*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<int volatile*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<int const volatile*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<int* const> >));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_base_of<trivial_base, propagate_trivialness<int* volatile> >));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_base_of<trivial_base, propagate_trivialness<int* const volatile> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<int&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<int const&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<int volatile&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<int const volatile&> >));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<int&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<int const&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<int volatile&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<int const volatile&&> >));
#endif
BOOST_FUSION_ASSERT_CWG496((is_base_of<trivial_base, propagate_trivialness<trivial> >));
BOOST_FUSION_ASSERT_CWG496((is_base_of<trivial_base, propagate_trivialness<trivial const> >));
BOOST_FUSION_ASSERT_CWG2094((is_base_of<trivial_base, propagate_trivialness<trivial volatile> >));
BOOST_FUSION_ASSERT_CWG2094((is_base_of<trivial_base, propagate_trivialness<trivial const volatile> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<trivial*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<trivial const*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<trivial volatile*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<trivial const volatile*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<trivial* const> >));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_base_of<trivial_base, propagate_trivialness<trivial* volatile> >));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_base_of<trivial_base, propagate_trivialness<trivial* const volatile> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<trivial&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<trivial const&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<trivial volatile&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<trivial const volatile&> >));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<trivial&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<trivial const&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<trivial volatile&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<trivial const volatile&&> >));
#endif
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_copy> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_copy const> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_copy volatile> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_copy const volatile> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_copy*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_copy const*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_copy volatile*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_copy const volatile*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_copy* const> >));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_base_of<trivial_base, propagate_trivialness<user_provided_copy* volatile> >));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_base_of<trivial_base, propagate_trivialness<user_provided_copy* const volatile> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_copy&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_copy const&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_copy volatile&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_copy const volatile&> >));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_copy&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_copy const&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_copy volatile&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_copy const volatile&&> >));
#endif
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_move> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_move const> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_move volatile> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_move const volatile> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_move*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_move const*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_move volatile*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_move const volatile*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_move* const> >));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_base_of<trivial_base, propagate_trivialness<user_provided_move* volatile> >));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_base_of<trivial_base, propagate_trivialness<user_provided_move* const volatile> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_move&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_move const&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_move volatile&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_move const volatile&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_move&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_move const&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_move volatile&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_move const volatile&&> >));
#endif
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_dtor> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_dtor const> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_dtor volatile> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_dtor const volatile> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_dtor*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_dtor const*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_dtor volatile*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_dtor const volatile*> >));
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<user_provided_dtor* const> >));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_base_of<trivial_base, propagate_trivialness<user_provided_dtor* volatile> >));
BOOST_FUSION_ASSERT_CWG496_SCALAR((is_base_of<trivial_base, propagate_trivialness<user_provided_dtor* const volatile> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_dtor&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_dtor const&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_dtor volatile&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_dtor const volatile&> >));
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_dtor&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_dtor const&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_dtor volatile&&> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<user_provided_dtor const volatile&&> >));
#endif
BOOST_MPL_ASSERT((is_base_of<trivial_base, propagate_trivialness<int, float, void*> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<int, float&, void*> >));
BOOST_FUSION_ASSERT_CWG496((is_base_of<trivial_base, propagate_trivialness<int, float, trivial> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<int, float, user_provided_copy> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<int, float, user_provided_move> >));
BOOST_MPL_ASSERT((is_base_of<non_trivial_base, propagate_trivialness<int, float, user_provided_dtor> >));
struct S1 : private propagate_trivialness<int, float, void*> { };
BOOST_MPL_ASSERT((is_trivially_copyable<S1>));
struct S2 : private propagate_trivialness<int, float&, void*> { };
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<S2>));
struct S3 : private propagate_trivialness<int, float, trivial> { };
BOOST_FUSION_ASSERT_CWG496((is_trivially_copyable<S3>));
struct S4 : private propagate_trivialness<int, float, user_provided_copy> { };
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<S4>));
struct S5 : private propagate_trivialness<int, float, user_provided_move> { };
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<S5>));
struct S6 : private propagate_trivialness<int, float, user_provided_dtor> { };
BOOST_MPL_ASSERT_NOT((is_trivially_copyable<S6>));

View File

@ -1,66 +0,0 @@
/*=============================================================================
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 TRIVIAL_HPP
#define TRIVIAL_HPP
#include <boost/fusion/support/detail/is_trivially_copyable.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/static_assert.hpp>
#if defined(BOOST_FUSION_DETAIL_VOLATILE_SCALAR_IS_NON_TRIVIALLY_COPYABLE)
# define BOOST_FUSION_ASSERT_CWG496_SCALAR BOOST_MPL_ASSERT_NOT
#elif defined(BOOST_FUSION_IS_TRIVIALLY_COPYABLE)
# define BOOST_FUSION_ASSERT_CWG496_SCALAR_I(...) BOOST_STATIC_ASSERT((__VA_ARGS__::value) == BOOST_FUSION_IS_TRIVIALLY_COPYABLE(int volatile))
# define BOOST_FUSION_ASSERT_CWG496_SCALAR(pred) BOOST_FUSION_ASSERT_CWG496_SCALAR_I pred
#else
# define BOOST_FUSION_ASSERT_CWG496_SCALAR BOOST_MPL_ASSERT
#endif
#if defined(BOOST_FUSION_IS_TRIVIALLY_COPYABLE)
# define BOOST_FUSION_ASSERT_CWG496 BOOST_MPL_ASSERT
# define BOOST_FUSION_ASSERT_CWG2094_I(...) BOOST_STATIC_ASSERT((__VA_ARGS__::value) == BOOST_FUSION_IS_TRIVIALLY_COPYABLE(trivial volatile))
# define BOOST_FUSION_ASSERT_CWG2094(pred) BOOST_FUSION_ASSERT_CWG2094_I pred
#elif defined(BOOST_FUSION_DETAIL_IS_TRIVIALLY_COPYABLE_CONFORMING)
# define BOOST_FUSION_ASSERT_CWG496 BOOST_MPL_ASSERT
# define BOOST_FUSION_ASSERT_CWG2094 BOOST_MPL_ASSERT
#else
# define BOOST_FUSION_ASSERT_CWG496(pred) struct skip_assertion
# define BOOST_FUSION_ASSERT_CWG2094(pred) struct skip_assertion
#endif
struct S;
typedef int (S::*member_type);
typedef int (S::*member_function_type)();
struct trivial { };
struct user_provided_copy
{
user_provided_copy(user_provided_copy const&);
user_provided_copy& operator=(user_provided_copy const&);
};
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
struct user_provided_move
{
user_provided_move(user_provided_move&&);
user_provided_move& operator=(user_provided_move&&);
};
#endif
struct user_provided_dtor
{
~user_provided_dtor();
};
#endif

View File

@ -19,7 +19,7 @@ void unused_construction()
{
boost::fusion::unused_type dephault;
boost::fusion::unused_type BOOST_ATTRIBUTE_UNUSED parenthesis();
boost::fusion::unused_type BOOST_ATTRIBUTE_UNUSED parenthesis = boost::fusion::unused_type();
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
boost::fusion::unused_type BOOST_ATTRIBUTE_UNUSED brace{};
boost::fusion::unused_type BOOST_ATTRIBUTE_UNUSED list_copy = {};