mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-30 20:47:31 +02:00
@ -16,10 +16,6 @@
|
|||||||
#include <boost/preprocessor/empty.hpp>
|
#include <boost/preprocessor/empty.hpp>
|
||||||
#include <boost/preprocessor/control/if.hpp>
|
#include <boost/preprocessor/control/if.hpp>
|
||||||
#include <boost/preprocessor/comparison/less.hpp>
|
#include <boost/preprocessor/comparison/less.hpp>
|
||||||
#include <boost/type_traits/add_reference.hpp>
|
|
||||||
#include <boost/type_traits/is_const.hpp>
|
|
||||||
#include <boost/type_traits/add_const.hpp>
|
|
||||||
#include <boost/type_traits/remove_const.hpp>
|
|
||||||
|
|
||||||
#include <boost/fusion/adapted/struct/detail/extension.hpp>
|
#include <boost/fusion/adapted/struct/detail/extension.hpp>
|
||||||
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
||||||
|
@ -15,9 +15,6 @@
|
|||||||
#include <boost/preprocessor/cat.hpp>
|
#include <boost/preprocessor/cat.hpp>
|
||||||
#include <boost/preprocessor/empty.hpp>
|
#include <boost/preprocessor/empty.hpp>
|
||||||
#include <boost/preprocessor/control/if.hpp>
|
#include <boost/preprocessor/control/if.hpp>
|
||||||
#include <boost/type_traits/add_reference.hpp>
|
|
||||||
#include <boost/type_traits/is_const.hpp>
|
|
||||||
#include <boost/type_traits/remove_const.hpp>
|
|
||||||
|
|
||||||
#include <boost/fusion/adapted/struct/detail/extension.hpp>
|
#include <boost/fusion/adapted/struct/detail/extension.hpp>
|
||||||
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
||||||
|
@ -21,8 +21,8 @@
|
|||||||
#include <boost/preprocessor/tuple/elem.hpp>
|
#include <boost/preprocessor/tuple/elem.hpp>
|
||||||
#include <boost/mpl/if.hpp>
|
#include <boost/mpl/if.hpp>
|
||||||
#include <boost/type_traits/is_const.hpp>
|
#include <boost/type_traits/is_const.hpp>
|
||||||
#include <boost/type_traits/add_const.hpp>
|
|
||||||
#include <boost/type_traits/remove_const.hpp>
|
#include <boost/type_traits/remove_const.hpp>
|
||||||
|
#include <boost/type_traits/remove_reference.hpp>
|
||||||
|
|
||||||
#include <boost/typeof/typeof.hpp>
|
#include <boost/typeof/typeof.hpp>
|
||||||
|
|
||||||
@ -83,20 +83,8 @@
|
|||||||
typedef \
|
typedef \
|
||||||
BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \
|
BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \
|
||||||
typename) \
|
typename) \
|
||||||
boost::remove_const< \
|
deduced_attr_type::type type; \
|
||||||
BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \
|
typedef type const_type;
|
||||||
typename) \
|
|
||||||
deduced_attr_type::type \
|
|
||||||
>::type type; \
|
|
||||||
\
|
|
||||||
typedef \
|
|
||||||
BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \
|
|
||||||
typename) \
|
|
||||||
boost::add_const< \
|
|
||||||
BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \
|
|
||||||
typename) \
|
|
||||||
deduced_attr_type::type \
|
|
||||||
>::type const_type;
|
|
||||||
|
|
||||||
#define BOOST_FUSION_ADT_ATTRIBUTE_GIVENTYPE( \
|
#define BOOST_FUSION_ADT_ATTRIBUTE_GIVENTYPE( \
|
||||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||||
|
@ -15,10 +15,6 @@
|
|||||||
#include <boost/preprocessor/empty.hpp>
|
#include <boost/preprocessor/empty.hpp>
|
||||||
#include <boost/preprocessor/control/iif.hpp>
|
#include <boost/preprocessor/control/iif.hpp>
|
||||||
#include <boost/preprocessor/comparison/less.hpp>
|
#include <boost/preprocessor/comparison/less.hpp>
|
||||||
#include <boost/type_traits/add_reference.hpp>
|
|
||||||
#include <boost/type_traits/is_const.hpp>
|
|
||||||
#include <boost/type_traits/add_const.hpp>
|
|
||||||
#include <boost/type_traits/remove_const.hpp>
|
|
||||||
|
|
||||||
#include <boost/fusion/adapted/struct/detail/extension.hpp>
|
#include <boost/fusion/adapted/struct/detail/extension.hpp>
|
||||||
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
||||||
|
@ -18,10 +18,6 @@
|
|||||||
#include <boost/preprocessor/comparison/less.hpp>
|
#include <boost/preprocessor/comparison/less.hpp>
|
||||||
#include <boost/preprocessor/seq/seq.hpp>
|
#include <boost/preprocessor/seq/seq.hpp>
|
||||||
#include <boost/preprocessor/variadic/to_seq.hpp>
|
#include <boost/preprocessor/variadic/to_seq.hpp>
|
||||||
#include <boost/type_traits/add_reference.hpp>
|
|
||||||
#include <boost/type_traits/is_const.hpp>
|
|
||||||
#include <boost/type_traits/add_const.hpp>
|
|
||||||
#include <boost/type_traits/remove_const.hpp>
|
|
||||||
|
|
||||||
#include <boost/fusion/adapted/struct/detail/extension.hpp>
|
#include <boost/fusion/adapted/struct/detail/extension.hpp>
|
||||||
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
||||||
|
@ -34,7 +34,9 @@
|
|||||||
#include <boost/mpl/tag.hpp>
|
#include <boost/mpl/tag.hpp>
|
||||||
#include <boost/mpl/eval_if.hpp>
|
#include <boost/mpl/eval_if.hpp>
|
||||||
#include <boost/mpl/identity.hpp>
|
#include <boost/mpl/identity.hpp>
|
||||||
|
#include <boost/type_traits/is_const.hpp>
|
||||||
#include <boost/type_traits/add_const.hpp>
|
#include <boost/type_traits/add_const.hpp>
|
||||||
|
#include <boost/type_traits/add_reference.hpp>
|
||||||
|
|
||||||
#include <boost/typeof/typeof.hpp>
|
#include <boost/typeof/typeof.hpp>
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
Copyright (c) 2001-2011 Joel de Guzman
|
Copyright (c) 2001-2011 Joel de Guzman
|
||||||
Copyright (c) 2007 Dan Marsden
|
Copyright (c) 2007 Dan Marsden
|
||||||
Copyright (c) 2009 Christopher Schmidt
|
Copyright (c) 2009 Christopher Schmidt
|
||||||
|
Copyright (c) 2018 Kohei Takahashi
|
||||||
|
|
||||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
@ -13,7 +14,6 @@
|
|||||||
#include <boost/mpl/apply.hpp>
|
#include <boost/mpl/apply.hpp>
|
||||||
#include <boost/mpl/eval_if.hpp>
|
#include <boost/mpl/eval_if.hpp>
|
||||||
#include <boost/mpl/identity.hpp>
|
#include <boost/mpl/identity.hpp>
|
||||||
#include <boost/mpl/lambda.hpp>
|
|
||||||
#include <boost/mpl/or.hpp>
|
#include <boost/mpl/or.hpp>
|
||||||
#include <boost/fusion/iterator/advance.hpp>
|
#include <boost/fusion/iterator/advance.hpp>
|
||||||
#include <boost/fusion/iterator/distance.hpp>
|
#include <boost/fusion/iterator/distance.hpp>
|
||||||
@ -22,10 +22,9 @@
|
|||||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||||
#include <boost/fusion/support/category_of.hpp>
|
#include <boost/fusion/support/category_of.hpp>
|
||||||
|
#include <boost/core/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion {
|
namespace boost { namespace fusion { namespace detail
|
||||||
struct random_access_traversal_tag;
|
|
||||||
namespace detail
|
|
||||||
{
|
{
|
||||||
template <typename Iterator, typename Pred>
|
template <typename Iterator, typename Pred>
|
||||||
struct apply_filter
|
struct apply_filter
|
||||||
@ -178,8 +177,8 @@ namespace detail
|
|||||||
choose_find_if<
|
choose_find_if<
|
||||||
First
|
First
|
||||||
, Last
|
, Last
|
||||||
, typename mpl::lambda<Pred>::type
|
, Pred
|
||||||
, is_base_of<random_access_traversal_tag, typename traits::category_of<First>::type>::value
|
, traits::is_random_access<First>::value
|
||||||
>::type
|
>::type
|
||||||
type;
|
type;
|
||||||
|
|
||||||
@ -208,31 +207,23 @@ namespace detail
|
|||||||
return recursive_call(iter, found());
|
return recursive_call(iter, found());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Iterator, typename Tag>
|
template <typename Iterator>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
static type
|
static typename boost::disable_if<traits::is_random_access<Iterator>, type>::type
|
||||||
choose_call(Iterator const& iter, Tag)
|
iter_call(Iterator const& iter)
|
||||||
{
|
{
|
||||||
return recursive_call(iter);
|
return recursive_call(iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Iterator>
|
template <typename Iterator>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
static type
|
static typename boost::enable_if<traits::is_random_access<Iterator>, type>::type
|
||||||
choose_call(Iterator const& iter, random_access_traversal_tag)
|
iter_call(Iterator const& iter)
|
||||||
{
|
{
|
||||||
typedef typename result_of::distance<Iterator, type>::type N;
|
typedef typename result_of::distance<Iterator, type>::type N;
|
||||||
return fusion::advance<N>(iter);
|
return fusion::advance<N>(iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
|
||||||
static type
|
|
||||||
iter_call(Iterator const& iter)
|
|
||||||
{
|
|
||||||
return choose_call(iter, typename traits::category_of<Iterator>::type());
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
static type
|
static type
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
/*=============================================================================
|
/*=============================================================================
|
||||||
Copyright (c) 2001-2011 Joel de Guzman
|
Copyright (c) 2001-2011 Joel de Guzman
|
||||||
|
Copyright (c) 2018 Kohei Takahashi
|
||||||
|
|
||||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
==============================================================================*/
|
==============================================================================*/
|
||||||
#if !defined(FUSION_REMOVE_IF_07162005_0818)
|
#if !defined(FUSION_REMOVE_IF_07162005_0818)
|
||||||
@ -10,7 +11,6 @@
|
|||||||
#include <boost/fusion/support/config.hpp>
|
#include <boost/fusion/support/config.hpp>
|
||||||
#include <boost/fusion/view/filter_view/filter_view.hpp>
|
#include <boost/fusion/view/filter_view/filter_view.hpp>
|
||||||
#include <boost/mpl/not.hpp>
|
#include <boost/mpl/not.hpp>
|
||||||
#include <boost/type_traits/is_same.hpp>
|
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
|
@ -24,12 +24,10 @@ namespace boost { namespace fusion
|
|||||||
struct value_at_key_impl<map_tag>
|
struct value_at_key_impl<map_tag>
|
||||||
{
|
{
|
||||||
template <typename Sequence, typename Key>
|
template <typename Sequence, typename Key>
|
||||||
struct apply
|
struct apply : BOOST_FUSION_DECLTYPE_N3031((
|
||||||
{
|
|
||||||
typedef typename BOOST_FUSION_IDENTIFIED_TYPE((
|
|
||||||
boost::declval<Sequence>().get_val(mpl::identity<Key>())
|
boost::declval<Sequence>().get_val(mpl::identity<Key>())
|
||||||
)) type;
|
))
|
||||||
};
|
{};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
@ -36,8 +36,6 @@
|
|||||||
# include <boost/fusion/container/map/detail/cpp03/map_fwd.hpp>
|
# include <boost/fusion/container/map/detail/cpp03/map_fwd.hpp>
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#include <boost/fusion/container/map/detail/map_impl.hpp>
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// C++11 interface
|
// C++11 interface
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -47,12 +47,10 @@ namespace boost { namespace fusion
|
|||||||
struct value_at_impl<vector_tag>
|
struct value_at_impl<vector_tag>
|
||||||
{
|
{
|
||||||
template <typename Sequence, typename N>
|
template <typename Sequence, typename N>
|
||||||
struct apply
|
struct apply : BOOST_FUSION_DECLTYPE_N3031((
|
||||||
{
|
|
||||||
typedef typename BOOST_FUSION_IDENTIFIED_TYPE((
|
|
||||||
vector_detail::value_at_impl<N::value>(boost::declval<Sequence*>())
|
vector_detail::value_at_impl<N::value>(boost::declval<Sequence*>())
|
||||||
)) type;
|
))
|
||||||
};
|
{};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
@ -168,9 +168,15 @@ namespace boost { namespace fusion
|
|||||||
: elem(std::forward<U>(rhs))
|
: elem(std::forward<U>(rhs))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
using elem_type = T;
|
||||||
T elem;
|
T elem;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// placed outside of vector_data due to GCC < 6 bug
|
||||||
|
template <std::size_t J, typename U>
|
||||||
|
static inline BOOST_FUSION_GPU_ENABLED
|
||||||
|
store<J, U> store_at_impl(store<J, U>*);
|
||||||
|
|
||||||
template <typename I, typename ...T>
|
template <typename I, typename ...T>
|
||||||
struct vector_data;
|
struct vector_data;
|
||||||
|
|
||||||
@ -231,32 +237,23 @@ namespace boost { namespace fusion
|
|||||||
assign(std::forward<Sequence>(seq), detail::index_sequence<M...>());
|
assign(std::forward<Sequence>(seq), detail::index_sequence<M...>());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <std::size_t N, typename U>
|
private:
|
||||||
static BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
template <std::size_t J>
|
||||||
U& at_detail(store<N, U>* this_)
|
using store_at = decltype(store_at_impl<J>(static_cast<vector_data*>(nullptr)));
|
||||||
{
|
|
||||||
return this_->elem;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <std::size_t N, typename U>
|
|
||||||
static BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
|
||||||
U const& at_detail(store<N, U> const* this_)
|
|
||||||
{
|
|
||||||
return this_->elem;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public:
|
||||||
template <typename J>
|
template <typename J>
|
||||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
auto at_impl(J) -> decltype(at_detail<J::value>(&std::declval<vector_data&>()))
|
typename store_at<J::value>::elem_type& at_impl(J)
|
||||||
{
|
{
|
||||||
return at_detail<J::value>(this);
|
return store_at<J::value>::elem;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename J>
|
template <typename J>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
auto at_impl(J) const -> decltype(at_detail<J::value>(&std::declval<vector_data const&>()))
|
typename store_at<J::value>::elem_type const& at_impl(J) const
|
||||||
{
|
{
|
||||||
return at_detail<J::value>(this);
|
return store_at<J::value>::elem;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} // namespace boost::fusion::vector_detail
|
} // namespace boost::fusion::vector_detail
|
||||||
|
@ -97,15 +97,26 @@ namespace std
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// Workaround for compiler which doesn't compile decltype(expr)::type.
|
// Workaround for compilers not implementing N3031 (DR743 and DR950).
|
||||||
// It expects decltype(expr) deduced as mpl::identity<T>.
|
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) || \
|
||||||
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) || BOOST_WORKAROUND(BOOST_GCC, < 40700)
|
BOOST_WORKAROUND(BOOST_GCC, < 40700) || \
|
||||||
|
defined(BOOST_CLANG) && (__clang_major__ == 3 && __clang_minor__ == 0)
|
||||||
|
# if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
|
||||||
|
namespace boost { namespace fusion { namespace detail
|
||||||
|
{
|
||||||
|
template <typename T>
|
||||||
|
using type_alias_t = T;
|
||||||
|
}}}
|
||||||
|
# define BOOST_FUSION_DECLTYPE_N3031(parenthesized_expr) \
|
||||||
|
boost::fusion::detail::type_alias_t<decltype parenthesized_expr>
|
||||||
|
# else
|
||||||
# include <boost/mpl/identity.hpp>
|
# include <boost/mpl/identity.hpp>
|
||||||
# define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \
|
# define BOOST_FUSION_DECLTYPE_N3031(parenthesized_expr) \
|
||||||
boost::mpl::identity<decltype parenthesized_expr>::type::type
|
boost::mpl::identity<decltype parenthesized_expr>::type
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
# define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \
|
# define BOOST_FUSION_DECLTYPE_N3031(parenthesized_expr) \
|
||||||
decltype parenthesized_expr ::type
|
decltype parenthesized_expr
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,20 +9,19 @@
|
|||||||
|
|
||||||
#include <boost/fusion/support/is_sequence.hpp>
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
||||||
#include <boost/core/enable_if.hpp>
|
|
||||||
#include <boost/mpl/bool.hpp>
|
#include <boost/mpl/bool.hpp>
|
||||||
#include <boost/mpl/equal_to.hpp>
|
|
||||||
|
|
||||||
namespace boost { namespace fusion { namespace detail
|
namespace boost { namespace fusion { namespace detail
|
||||||
{
|
{
|
||||||
template <typename Sequence1, typename Sequence2, typename = void, typename = void>
|
template <typename Sequence1, typename Sequence2, bool
|
||||||
|
= traits::is_sequence<Sequence1>::value &&
|
||||||
|
traits::is_sequence<Sequence2>::value>
|
||||||
struct is_same_size : mpl::false_ {};
|
struct is_same_size : mpl::false_ {};
|
||||||
|
|
||||||
template <typename Sequence1, typename Sequence2>
|
template <typename Sequence1, typename Sequence2>
|
||||||
struct is_same_size<Sequence1, Sequence2,
|
struct is_same_size<Sequence1, Sequence2, true>
|
||||||
typename enable_if<traits::is_sequence<Sequence1> >::type,
|
: mpl::bool_<result_of::size<Sequence1>::value ==
|
||||||
typename enable_if<traits::is_sequence<Sequence2> >::type>
|
result_of::size<Sequence2>::value>
|
||||||
: mpl::equal_to<result_of::size<Sequence1>, result_of::size<Sequence2> >
|
|
||||||
{};
|
{};
|
||||||
}}}
|
}}}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
// Special tags:
|
// Special tags:
|
||||||
|
struct non_fusion_tag;
|
||||||
struct sequence_facade_tag;
|
struct sequence_facade_tag;
|
||||||
struct boost_tuple_tag; // boost::tuples::tuple tag
|
struct boost_tuple_tag; // boost::tuples::tuple tag
|
||||||
struct boost_array_tag; // boost::array tag
|
struct boost_array_tag; // boost::array tag
|
||||||
@ -32,6 +33,13 @@ namespace boost { namespace fusion
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct is_view_impl<non_fusion_tag>
|
||||||
|
{
|
||||||
|
template <typename T>
|
||||||
|
struct apply : mpl::false_ {};
|
||||||
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct is_view_impl<sequence_facade_tag>
|
struct is_view_impl<sequence_facade_tag>
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*=============================================================================
|
/*=============================================================================
|
||||||
Copyright (c) 2001-2011 Joel de Guzman
|
Copyright (c) 2001-2011 Joel de Guzman
|
||||||
|
Copyright (c) 2018 Kohei Takahashi
|
||||||
|
|
||||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
@ -8,14 +9,10 @@
|
|||||||
#define FUSION_NEXT_IMPL_06052005_0900
|
#define FUSION_NEXT_IMPL_06052005_0900
|
||||||
|
|
||||||
#include <boost/fusion/support/config.hpp>
|
#include <boost/fusion/support/config.hpp>
|
||||||
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
|
#include <boost/fusion/iterator/next.hpp>
|
||||||
#include <boost/fusion/iterator/value_of.hpp>
|
#include <boost/fusion/iterator/equal_to.hpp>
|
||||||
#include <boost/mpl/eval_if.hpp>
|
#include <boost/mpl/eval_if.hpp>
|
||||||
#include <boost/mpl/identity.hpp>
|
#include <boost/mpl/identity.hpp>
|
||||||
#include <boost/mpl/lambda.hpp>
|
|
||||||
#include <boost/mpl/quote.hpp>
|
|
||||||
#include <boost/mpl/bind.hpp>
|
|
||||||
#include <boost/mpl/placeholders.hpp>
|
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -48,26 +45,13 @@ namespace boost { namespace fusion
|
|||||||
>::type
|
>::type
|
||||||
next_type;
|
next_type;
|
||||||
|
|
||||||
typedef typename
|
typedef filter_iterator<category, next_type, last_type, pred_type> type;
|
||||||
detail::static_find_if<
|
|
||||||
next_type
|
|
||||||
, last_type
|
|
||||||
, mpl::bind1<
|
|
||||||
typename mpl::lambda<pred_type>::type
|
|
||||||
, mpl::bind1<mpl::quote1<result_of::value_of>,mpl::_1>
|
|
||||||
>
|
|
||||||
>
|
|
||||||
filter;
|
|
||||||
|
|
||||||
typedef filter_iterator<
|
|
||||||
category, typename filter::type, last_type, pred_type>
|
|
||||||
type;
|
|
||||||
|
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
static type
|
static type
|
||||||
call(Iterator const& i)
|
call(Iterator const& i)
|
||||||
{
|
{
|
||||||
return type(filter::iter_call(i.first));
|
return type(fusion::next(i.first));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*=============================================================================
|
/*=============================================================================
|
||||||
Copyright (c) 2001-2011 Joel de Guzman
|
Copyright (c) 2001-2011 Joel de Guzman
|
||||||
|
Copyright (c) 2018 Kohei Takahashi
|
||||||
|
|
||||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
@ -9,7 +10,6 @@
|
|||||||
|
|
||||||
#include <boost/fusion/support/config.hpp>
|
#include <boost/fusion/support/config.hpp>
|
||||||
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
|
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
|
||||||
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
|
|
||||||
#include <boost/fusion/iterator/value_of.hpp>
|
#include <boost/fusion/iterator/value_of.hpp>
|
||||||
#include <boost/fusion/support/iterator_base.hpp>
|
#include <boost/fusion/support/iterator_base.hpp>
|
||||||
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
|
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
|
||||||
|
@ -257,6 +257,7 @@ project
|
|||||||
[ run sequence/swap.cpp ]
|
[ run sequence/swap.cpp ]
|
||||||
|
|
||||||
[ compile support/is_sequence.cpp ]
|
[ compile support/is_sequence.cpp ]
|
||||||
|
[ compile support/is_view.cpp ]
|
||||||
[ compile support/pair_deque.cpp ]
|
[ compile support/pair_deque.cpp ]
|
||||||
[ compile support/pair_list.cpp ]
|
[ compile support/pair_list.cpp ]
|
||||||
[ compile support/pair_map.cpp ]
|
[ compile support/pair_map.cpp ]
|
||||||
|
@ -165,6 +165,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
|
||||||
ns::point p(123, 456, 789);
|
ns::point p(123, 456, 789);
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
@ -237,6 +238,7 @@ main()
|
|||||||
#if !BOOST_WORKAROUND(__GNUC__,<4)
|
#if !BOOST_WORKAROUND(__GNUC__,<4)
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point_with_private_members>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point_with_private_members>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<ns::point_with_private_members>::value);
|
||||||
ns::point_with_private_members p(123, 456, 789);
|
ns::point_with_private_members p(123, 456, 789);
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
@ -300,7 +302,7 @@ main()
|
|||||||
BOOST_MPL_ASSERT((
|
BOOST_MPL_ASSERT((
|
||||||
boost::is_same<
|
boost::is_same<
|
||||||
boost::fusion::result_of::back<ns::point const>::type::type,
|
boost::fusion::result_of::back<ns::point const>::type::type,
|
||||||
const int
|
int
|
||||||
>));
|
>));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_adt>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_adt>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<empty_adt>::value);
|
||||||
empty_adt e;
|
empty_adt e;
|
||||||
|
|
||||||
std::cout << e << std::endl;
|
std::cout << e << std::endl;
|
||||||
|
@ -93,6 +93,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
|
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_view<adapted::point>::value);
|
||||||
ns::point basep(123, 456, 789);
|
ns::point basep(123, 456, 789);
|
||||||
adapted::point p(basep);
|
adapted::point p(basep);
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ main()
|
|||||||
empty_adt empty;
|
empty_adt empty;
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_adt>));
|
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_adt>));
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_view<adapted::empty_adt>::value);
|
||||||
adapted::empty_adt e(empty);
|
adapted::empty_adt e(empty);
|
||||||
|
|
||||||
std::cout << e << std::endl;
|
std::cout << e << std::endl;
|
||||||
|
@ -84,6 +84,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
|
||||||
ns::point p(123, 456, 789);
|
ns::point p(123, 456, 789);
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -42,6 +42,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_adt>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_adt>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<empty_adt>::value);
|
||||||
empty_adt e;
|
empty_adt e;
|
||||||
|
|
||||||
std::cout << e << std::endl;
|
std::cout << e << std::endl;
|
||||||
|
@ -80,6 +80,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
|
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_view<adapted::point>::value);
|
||||||
ns::point basep(123, 456);
|
ns::point basep(123, 456);
|
||||||
adapted::point p(basep);
|
adapted::point p(basep);
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ main()
|
|||||||
empty_adt empty;
|
empty_adt empty;
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_adt>));
|
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_adt>));
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_view<adapted::empty_adt>::value);
|
||||||
adapted::empty_adt e(empty);
|
adapted::empty_adt e(empty);
|
||||||
|
|
||||||
std::cout << e << std::endl;
|
std::cout << e << std::endl;
|
||||||
|
@ -72,7 +72,7 @@ namespace ns
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct empty_struct {};
|
struct empty_struct {};
|
||||||
BOOST_FUSION_ADAPT_ASSOC_STRUCT(empty_struct,);
|
BOOST_FUSION_ADAPT_ASSOC_STRUCT(empty_struct,)
|
||||||
|
|
||||||
int
|
int
|
||||||
main()
|
main()
|
||||||
@ -86,6 +86,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
|
||||||
ns::point p = {123, 456, 789};
|
ns::point p = {123, 456, 789};
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -42,6 +42,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
|
||||||
empty_struct e;
|
empty_struct e;
|
||||||
|
|
||||||
std::cout << e << std::endl;
|
std::cout << e << std::endl;
|
||||||
|
@ -53,7 +53,7 @@ namespace ns
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct empty_struct {};
|
struct empty_struct {};
|
||||||
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(empty_struct, renamed_empty_struct,);
|
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(empty_struct, renamed_empty_struct,)
|
||||||
|
|
||||||
int
|
int
|
||||||
main()
|
main()
|
||||||
@ -66,6 +66,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
|
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_view<adapted::point>::value);
|
||||||
ns::point basep = {123, 456};
|
ns::point basep = {123, 456};
|
||||||
adapted::point p(basep);
|
adapted::point p(basep);
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ main()
|
|||||||
empty_struct empty;
|
empty_struct empty;
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_struct>));
|
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_struct>));
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_view<adapted::empty_struct>::value);
|
||||||
adapted::empty_struct e(empty);
|
adapted::empty_struct e(empty);
|
||||||
|
|
||||||
std::cout << e << std::endl;
|
std::cout << e << std::endl;
|
||||||
|
@ -98,6 +98,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||||
point p(123, 456, 789);
|
point p(123, 456, 789);
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -96,6 +96,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||||
point p = {123, 456, 789.43f};
|
point p = {123, 456, 789.43f};
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -170,6 +170,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||||
point p = {123, 456, 789};
|
point p = {123, 456, 789};
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -42,6 +42,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
|
||||||
empty_struct e;
|
empty_struct e;
|
||||||
|
|
||||||
std::cout << e << std::endl;
|
std::cout << e << std::endl;
|
||||||
|
@ -87,6 +87,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
|
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_view<adapted::point>::value);
|
||||||
ns::point basep = {123, 456, 789};
|
ns::point basep = {123, 456, 789};
|
||||||
adapted::point p(basep);
|
adapted::point p(basep);
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ main()
|
|||||||
empty_struct empty;
|
empty_struct empty;
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_struct>));
|
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_struct>));
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_view<adapted::empty_struct>::value);
|
||||||
adapted::empty_struct e(empty);
|
adapted::empty_struct e(empty);
|
||||||
|
|
||||||
std::cout << e << std::endl;
|
std::cout << e << std::endl;
|
||||||
|
@ -107,6 +107,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||||
point p(123, 456, 789);
|
point p(123, 456, 789);
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -96,6 +96,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||||
point p = {123, 456, 789};
|
point p = {123, 456, 789};
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -22,6 +22,8 @@ int main()
|
|||||||
|
|
||||||
BOOST_MPL_ASSERT((traits::is_sequence<array_type>));
|
BOOST_MPL_ASSERT((traits::is_sequence<array_type>));
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<array_type>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<array_type>));
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_sequence<array_type>::value);
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<array_type>::value);
|
||||||
|
|
||||||
array_type arr = {1,2,3};
|
array_type arr = {1,2,3};
|
||||||
|
|
||||||
|
@ -26,6 +26,8 @@ int main()
|
|||||||
|
|
||||||
BOOST_MPL_ASSERT((traits::is_sequence<array_type>));
|
BOOST_MPL_ASSERT((traits::is_sequence<array_type>));
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<array_type>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<array_type>));
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_sequence<array_type>::value);
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<array_type>::value);
|
||||||
|
|
||||||
array_type arr = {{1,2,3}};
|
array_type arr = {{1,2,3}};
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@ main()
|
|||||||
{
|
{
|
||||||
typedef boost::tuple<int, std::string> tuple_type;
|
typedef boost::tuple<int, std::string> tuple_type;
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<tuple_type>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<tuple_type>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<tuple_type>::value);
|
||||||
tuple_type t(123, "Hola!!!");
|
tuple_type t(123, "Hola!!!");
|
||||||
|
|
||||||
std::cout << at_c<0>(t) << std::endl;
|
std::cout << at_c<0>(t) << std::endl;
|
||||||
|
@ -54,11 +54,14 @@ test()
|
|||||||
using namespace test_detail;
|
using namespace test_detail;
|
||||||
|
|
||||||
nil empty;
|
nil empty;
|
||||||
|
(void)empty;
|
||||||
|
|
||||||
FUSION_SEQUENCE<> empty0;
|
FUSION_SEQUENCE<> empty0;
|
||||||
|
(void)empty0;
|
||||||
|
|
||||||
#ifndef NO_CONSTRUCT_FROM_NIL
|
#ifndef NO_CONSTRUCT_FROM_NIL
|
||||||
FUSION_SEQUENCE<> empty1(empty);
|
FUSION_SEQUENCE<> empty1(empty);
|
||||||
|
(void)empty1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FUSION_SEQUENCE<int> t1;
|
FUSION_SEQUENCE<int> t1;
|
||||||
|
@ -42,6 +42,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
|
||||||
ns::point p(123, 456);
|
ns::point p(123, 456);
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -30,6 +30,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
|
||||||
empty_struct e;
|
empty_struct e;
|
||||||
|
|
||||||
std::cout << e << std::endl;
|
std::cout << e << std::endl;
|
||||||
|
@ -46,6 +46,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||||
point p(123, 456);
|
point p(123, 456);
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -30,6 +30,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct<void> >));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct<void> >));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct<void> >::value);
|
||||||
empty_struct<void> e;
|
empty_struct<void> e;
|
||||||
|
|
||||||
std::cout << e << std::endl;
|
std::cout << e << std::endl;
|
||||||
|
@ -54,6 +54,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
|
||||||
ns::point p(123, 456);
|
ns::point p(123, 456);
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -30,6 +30,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
|
||||||
empty_struct e;
|
empty_struct e;
|
||||||
|
|
||||||
std::cout << e << std::endl;
|
std::cout << e << std::endl;
|
||||||
|
@ -66,6 +66,7 @@ void run_test()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<Point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<Point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<Point>::value);
|
||||||
Point p(123, 456);
|
Point p(123, 456);
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -30,6 +30,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
|
||||||
empty_struct e;
|
empty_struct e;
|
||||||
|
|
||||||
std::cout << e << std::endl;
|
std::cout << e << std::endl;
|
||||||
|
@ -42,6 +42,7 @@ main()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
|
||||||
point p(123, 456);
|
point p(123, 456);
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -61,6 +61,7 @@ void run_test()
|
|||||||
|
|
||||||
{
|
{
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<Point>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<Point>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<Point>::value);
|
||||||
Point p(123, 456);
|
Point p(123, 456);
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -55,11 +55,14 @@ test()
|
|||||||
using namespace test_detail;
|
using namespace test_detail;
|
||||||
|
|
||||||
nil empty;
|
nil empty;
|
||||||
|
(void)empty;
|
||||||
|
|
||||||
map<> empty0;
|
map<> empty0;
|
||||||
|
(void)empty0;
|
||||||
|
|
||||||
#ifndef NO_CONSTRUCT_FROM_NIL
|
#ifndef NO_CONSTRUCT_FROM_NIL
|
||||||
map<> empty1(empty);
|
map<> empty1(empty);
|
||||||
|
(void)empty1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
map<pair<key1, int> > t1;
|
map<pair<key1, int> > t1;
|
||||||
|
@ -89,6 +89,9 @@ main()
|
|||||||
BOOST_MPL_ASSERT((traits::is_sequence<t1>));
|
BOOST_MPL_ASSERT((traits::is_sequence<t1>));
|
||||||
BOOST_MPL_ASSERT((traits::is_sequence<t2>));
|
BOOST_MPL_ASSERT((traits::is_sequence<t2>));
|
||||||
BOOST_MPL_ASSERT((traits::is_sequence<t3>));
|
BOOST_MPL_ASSERT((traits::is_sequence<t3>));
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_sequence<t1>::value);
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_sequence<t2>::value);
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_sequence<t3>::value);
|
||||||
}
|
}
|
||||||
|
|
||||||
{ // testing mpl::is_sequence
|
{ // testing mpl::is_sequence
|
||||||
|
@ -33,6 +33,8 @@ int main()
|
|||||||
|
|
||||||
BOOST_MPL_ASSERT((traits::is_sequence<array_type>));
|
BOOST_MPL_ASSERT((traits::is_sequence<array_type>));
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<array_type>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<array_type>));
|
||||||
|
BOOST_STATIC_ASSERT(traits::is_sequence<array_type>::value);
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<array_type>::value);
|
||||||
|
|
||||||
array_type arr = {{1,2,3}};
|
array_type arr = {{1,2,3}};
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@ main()
|
|||||||
{
|
{
|
||||||
typedef std::pair<int, std::string> pair_type;
|
typedef std::pair<int, std::string> pair_type;
|
||||||
BOOST_MPL_ASSERT_NOT((traits::is_view<pair_type>));
|
BOOST_MPL_ASSERT_NOT((traits::is_view<pair_type>));
|
||||||
|
BOOST_STATIC_ASSERT(!traits::is_view<pair_type>::value);
|
||||||
pair_type p(123, "Hola!!!");
|
pair_type p(123, "Hola!!!");
|
||||||
|
|
||||||
std::cout << at_c<0>(p) << std::endl;
|
std::cout << at_c<0>(p) << std::endl;
|
||||||
|
@ -94,7 +94,7 @@ main()
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
vector2<int, int> t1(123, 456);
|
vector2<int, short> t1(123, 456);
|
||||||
vector2<double, float> t2(t1);
|
vector2<double, float> t2(t1);
|
||||||
(void)t2;
|
(void)t2;
|
||||||
}
|
}
|
||||||
|
15
test/support/is_view.cpp
Normal file
15
test/support/is_view.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2018 Nikita Kniazev
|
||||||
|
|
||||||
|
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/support/is_view.hpp>
|
||||||
|
#include <boost/static_assert.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
// Make sure fusion::is_view can be used with non fusion types.
|
||||||
|
struct incomplete;
|
||||||
|
BOOST_STATIC_ASSERT(!boost::fusion::traits::is_view<incomplete>::value);
|
||||||
|
|
||||||
|
int main() { }
|
@ -91,5 +91,6 @@ void only_unused()
|
|||||||
BOOST_STATIC_ASSERT((sizeof(test_unused(0)) == sizeof(boost::type_traits::no_type)));
|
BOOST_STATIC_ASSERT((sizeof(test_unused(0)) == sizeof(boost::type_traits::no_type)));
|
||||||
|
|
||||||
boost::fusion::unused_type my_unused;
|
boost::fusion::unused_type my_unused;
|
||||||
|
(void)my_unused;
|
||||||
BOOST_STATIC_ASSERT((sizeof(test_unused(my_unused)) == sizeof(boost::type_traits::yes_type)));
|
BOOST_STATIC_ASSERT((sizeof(test_unused(my_unused)) == sizeof(boost::type_traits::yes_type)));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user