forked from boostorg/fusion
Compare commits
55 Commits
boost-1.66
...
mutable_fu
Author | SHA1 | Date | |
---|---|---|---|
c1fe4e78ab | |||
0e4c5127f5 | |||
afb8b150a9 | |||
d832387fdb | |||
98b96c3b97 | |||
68be23a0b9 | |||
6f8de8d774 | |||
5221bbbc76 | |||
0e900bba3f | |||
38aa3705d0 | |||
1854626651 | |||
e8da43a539 | |||
3b8fb67b52 | |||
c4881f1862 | |||
e818089a91 | |||
a95a838779 | |||
7443cb1101 | |||
84b1847442 | |||
a273cd8131 | |||
757541f9d2 | |||
dd695c1dbd | |||
96b2e51828 | |||
e962c1abb5 | |||
e3b053f969 | |||
11a3f250b8 | |||
79262831ef | |||
d8f608c8f1 | |||
2aea153be0 | |||
4734cf4a13 | |||
d5bd71c886 | |||
c3dec40e72 | |||
9de3272174 | |||
25c6334c58 | |||
101a056a92 | |||
82f677c169 | |||
f61bffb21f | |||
4c67886cc2 | |||
38818fbe3d | |||
eeeee9bfbb | |||
eb0cbbc347 | |||
d0c17119e7 | |||
28ea5dacce | |||
6c96720080 | |||
0a8f0f49b2 | |||
cdd1408d2b | |||
540ea0ef0c | |||
671f22b013 | |||
dfceaffc58 | |||
2c86e9d18c | |||
d8e6f406ab | |||
b42314fb02 | |||
806b621931 | |||
39fb05e40f | |||
dc47261890 | |||
099333b61d |
35
.travis.yml
35
.travis.yml
@ -1,5 +1,5 @@
|
||||
# Copyright 2016, 2017 Peter Dimov
|
||||
# Copyright 2017 Kohei Takahashi
|
||||
# Copyright 2017-2018 Kohei Takahashi
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
@ -11,11 +11,6 @@ os:
|
||||
- linux
|
||||
- osx
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- develop
|
||||
|
||||
env:
|
||||
matrix:
|
||||
- BOGUS_JOB=true
|
||||
@ -30,6 +25,20 @@ matrix:
|
||||
- os: linux
|
||||
env: TOOLSET=gcc CXXSTD=03,11,1y
|
||||
|
||||
- os: linux
|
||||
env: TOOLSET=gcc-4.4 CXXSTD=98,0x
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-4.4
|
||||
|
||||
- os: linux
|
||||
env: TOOLSET=gcc-4.6 CXXSTD=03,0x
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-4.6
|
||||
|
||||
- os: linux
|
||||
env: TOOLSET=gcc-4.7 CXXSTD=03,11
|
||||
addons:
|
||||
@ -153,6 +162,17 @@ matrix:
|
||||
- ubuntu-toolchain-r-test
|
||||
- llvm-toolchain-trusty-4.0
|
||||
|
||||
- os: linux
|
||||
env: TOOLSET=clang-5.0 CXXSTD=03,11,14,1z,2a
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- clang-5.0
|
||||
- libstdc++-4.9-dev
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
- llvm-toolchain-trusty-5.0
|
||||
|
||||
- os: osx
|
||||
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z
|
||||
|
||||
@ -167,6 +187,7 @@ install:
|
||||
- git submodule init libs/bind
|
||||
- git submodule init libs/concept_check
|
||||
- git submodule init libs/config
|
||||
- git submodule init libs/container_hash
|
||||
- git submodule init libs/conversion
|
||||
- git submodule init libs/core
|
||||
- git submodule init libs/detail
|
||||
@ -201,4 +222,4 @@ install:
|
||||
- ./b2 headers
|
||||
|
||||
script:
|
||||
- ./b2 libs/fusion/test toolset=$TOOLSET cxxstd=$CXXSTD define=RUNNING_ON_TRAVIS=1
|
||||
- ./b2 -j`(nproc || sysctl -n hw.ncpu) 2> /dev/null` libs/fusion/test toolset=$TOOLSET cxxstd=$CXXSTD
|
||||
|
25
appveyor.yml
25
appveyor.yml
@ -1,5 +1,5 @@
|
||||
# Copyright 2016, 2017 Peter Dimov
|
||||
# Copyright 2017 Kohei Takahashi
|
||||
# Copyright 2017-2018 Kohei Takahashi
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
@ -7,25 +7,35 @@ version: 1.0.{build}-{branch}
|
||||
|
||||
shallow_clone: true
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- develop
|
||||
|
||||
environment:
|
||||
matrix:
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||
TOOLSET: msvc-9.0
|
||||
CXXSTD: latest # fake
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||
TOOLSET: msvc-10.0
|
||||
CXXSTD: latest # fake
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||
TOOLSET: msvc-11.0
|
||||
CXXSTD: latest # fake
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||
TOOLSET: msvc-12.0
|
||||
CXXSTD: latest # fake
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
TOOLSET: msvc-14.0
|
||||
CXXSTD: 14
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
TOOLSET: msvc-14.0
|
||||
CXXSTD: latest
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
TOOLSET: msvc-14.1
|
||||
CXXSTD: 14
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
TOOLSET: msvc-14.1
|
||||
CXXSTD: 17
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
TOOLSET: msvc-14.1
|
||||
CXXSTD: latest
|
||||
|
||||
install:
|
||||
- set BOOST_BRANCH=develop
|
||||
@ -39,6 +49,7 @@ install:
|
||||
- git submodule init libs/bind
|
||||
- git submodule init libs/concept_check
|
||||
- git submodule init libs/config
|
||||
- git submodule init libs/container_hash
|
||||
- git submodule init libs/conversion
|
||||
- git submodule init libs/core
|
||||
- git submodule init libs/detail
|
||||
@ -71,4 +82,4 @@ install:
|
||||
build: off
|
||||
|
||||
test_script:
|
||||
- b2 libs/fusion/test toolset=%TOOLSET% define=RUNNING_ON_APPVEYOR=1
|
||||
- b2 -j%NUMBER_OF_PROCESSORS% --hash libs/fusion/test toolset=%TOOLSET% cxxstd=%CXXSTD%
|
||||
|
@ -2,6 +2,7 @@
|
||||
Copyright (C) 2001-2011 Joel de Guzman
|
||||
Copyright (C) 2006 Dan Marsden
|
||||
Copyright (C) 2010 Christopher Schmidt
|
||||
Copyright (C) 2018 Kohei Takahashi
|
||||
|
||||
Use, modification and distribution is subject to the Boost Software
|
||||
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@ -20,39 +21,37 @@
|
||||
]
|
||||
]
|
||||
|
||||
[def __spirit__ [@http://spirit.sourceforge.net Spirit]]
|
||||
[def __phoenix__ [@http://www.boost.org/libs/phoenix/index.html Phoenix]]
|
||||
[def __mpl__ [@http://www.boost.org/libs/mpl/index.html MPL]]
|
||||
[def __spirit__ [@http://boost-spirit.com/home/ Spirit]]
|
||||
[def __phoenix__ [@http://www.boost.org/libs/phoenix Phoenix]]
|
||||
[def __mpl__ [@http://www.boost.org/libs/mpl MPL]]
|
||||
[def __stl__ [@http://en.wikipedia.org/wiki/Standard_Template_Library STL]]
|
||||
[def __tuple__ [@http://www.boost.org/libs/tuple/doc/tuple_users_guide.html Boost.Tuple]]
|
||||
[def __tuple__ [@http://www.boost.org/libs/tuple Boost.Tuple]]
|
||||
[def __tr1__tuple__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1403.pdf TR1 Tuple]]
|
||||
[def __boost_tools__ [@http://www.boost.org/tools/index.html Boost Tools]]
|
||||
[def __spirit_list__ [@https://lists.sourceforge.net/lists/listinfo/spirit-general Spirit Mailing List]]
|
||||
[def __spirit_general__ [@news://news.gmane.org/gmane.comp.spirit.general Spirit General NNTP news portal]]
|
||||
[def __gmane__ [@http://www.gmane.org Gmane]]
|
||||
[def __mlist_archive__ [@http://news.gmane.org/gmane.comp.parsers.spirit.general]]
|
||||
[def __spirit_list__ [@https://sourceforge.net/projects/spirit/lists/spirit-general Spirit Mailing List]]
|
||||
[def __list_archive__ [@https://sourceforge.net/p/spirit/mailman/spirit-general/ archive]]
|
||||
[def __jaakko_jarvi__ [@http://www.boost.org/people/jaakko_jarvi.htm Jaakko Jarvi]]
|
||||
[def __david_abrahams__ [@http://www.boost.org/people/dave_abrahams.htm David Abrahams]]
|
||||
[def __the_forwarding_problem__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm The Forwarding Problem]]
|
||||
|
||||
[def __boost_any__ [@http://www.boost.org/doc/html/any.html Boost.Any]]
|
||||
[def __boost_any__ [@http://www.boost.org/libs/any Boost.Any Library]]
|
||||
[def __new_iterator_concepts__ [@http://www.boost.org/libs/iterator/doc/new-iter-concepts.html New Iterator Concepts]]
|
||||
[def __boost_array_library__ [@http://www.boost.org/doc/html/array.html Boost.Array Library]]
|
||||
[def __boost_variant_library__ [@http://www.boost.org/doc/html/variant.html Boost.Variant Library]]
|
||||
[def __boost_tuple_library__ [@http://www.boost.org/libs/tuple/doc/tuple_users_guide.html Boost.Tuple Library]]
|
||||
[def __boost_ref__ [@http://www.boost.org/doc/html/ref.html Boost.Ref]]
|
||||
[def __boost_ref_call__ [@http://www.boost.org/doc/html/ref.html `ref`]]
|
||||
[def __boost_result_of__ [@http://www.boost.org/libs/utility/utility.htm#result_of Boost.ResultOf]]
|
||||
[def __boost_array_library__ [@http://www.boost.org/libs/array Boost.Array Library]]
|
||||
[def __boost_variant_library__ [@http://www.boost.org/libs/variant Boost.Variant Library]]
|
||||
[def __boost_tuple_library__ [@http://www.boost.org/libs/tuple Boost.Tuple Library]]
|
||||
[def __boost_ref__ [@http://www.boost.org/libs/core/ref.html Ref utility]]
|
||||
[def __boost_ref_call__ [@http://www.boost.org/libs/core/ref.html `ref`]]
|
||||
[def __boost_result_of__ [@http://www.boost.org/libs/utility/utility.htm#result_of ResultOf utility]]
|
||||
[def __boost_result_of_call__ [@http://www.boost.org/libs/utility/utility.htm#result_of `boost::result_of`]]
|
||||
[def __boost_enable_if__ [@http://www.boost.org/libs/utility/enable_if.html Boost.EnableIf utility]]
|
||||
[def __boost_shared_ptr_call__ [@http://www.boost.org/libs/smart_ptr/shared_ptr.htm `boost::shared_ptr`]]
|
||||
[def __boost_func_forward__ [@http://www.boost.org/libs/functional/forward/doc/html/index.html Boost.Functional/Forward]]
|
||||
[def __boost_func_factory__ [@http://www.boost.org/libs/functional/factory/doc/html/index.html Boost.Functional/Factory]]
|
||||
[def __boost_func_hash__ [@http://www.boost.org/doc/html/hash.html Boost.Functional/Hash]]
|
||||
[def __std_pair_doc__ [@http://www.sgi.com/tech/stl/pair.html `std::pair`]]
|
||||
[def __boost_enable_if__ [@http://www.boost.org/libs/core/doc/html/core/enable_if.html EnableIf utility]]
|
||||
[def __boost_shared_ptr_call__ [@http://www.boost.org/libs/smart_ptr#shared_ptr `boost::shared_ptr`]]
|
||||
[def __boost_func_forward__ [@http://www.boost.org/libs/functional/forward Boost.Functional/Forward Library]]
|
||||
[def __boost_func_factory__ [@http://www.boost.org/libs/functional/factory Boost.Functional/Factory Library]]
|
||||
[def __boost_func_hash__ [@http://www.boost.org/doc/html/hash.html Boost.ContainerHash Library]]
|
||||
[def __std_pair_doc__ [@http://en.cppreference.com/w/cpp/utility/pair `std::pair`]]
|
||||
[def __std_tuple_doc__ [@http://en.cppreference.com/w/cpp/utility/tuple `std::tuple`]]
|
||||
[def __std_plus_doc__ [@http://www.sgi.com/tech/stl/plus.html `std::plus`]]
|
||||
[def __std_minus_doc__ [@http://www.sgi.com/tech/stl/minus.html `std::minus`]]
|
||||
[def __std_plus_doc__ [@http://en.cppreference.com/w/cpp/utility/functional/plus `std::plus`]]
|
||||
[def __std_minus_doc__ [@http://en.cppreference.com/w/cpp/utility/functional/minus `std::minus`]]
|
||||
|
||||
[def __mpl_integral_constant__ [@http://www.boost.org/libs/mpl/doc/refmanual/integral-constant.html MPL Integral Constant]]
|
||||
[def __mpl_boolean_constant__ [@http://www.boost.org/libs/mpl/doc/refmanual/integral-constant.html MPL Boolean Constant]]
|
||||
|
@ -61,11 +61,8 @@ tool. QuickBook can be found in the __boost_tools__.
|
||||
[heading Support]
|
||||
|
||||
Please direct all questions to Spirit's mailing list. You can subscribe to the
|
||||
__spirit_list__. The mailing list has a searchable archive. A search link to
|
||||
this archive is provided in __spirit__'s home page. You may also read and post
|
||||
messages to the mailing list through __spirit_general__ (thanks to __gmane__).
|
||||
The news group mirrors the mailing list. Here is a link to the archives:
|
||||
__mlist_archive__.
|
||||
__spirit_list__. The mailing list has a searchable archive. Here is a link to
|
||||
the archives: __list_archive__.
|
||||
|
||||
[endsect]
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
[/==============================================================================
|
||||
Copyright (C) 2001-2011 Joel de Guzman
|
||||
Copyright (C) 2006 Dan Marsden
|
||||
Copyright (C) 2018 Kohei Takahashi
|
||||
|
||||
Use, modification and distribution is subject to the Boost Software
|
||||
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@ -8,20 +9,20 @@
|
||||
===============================================================================/]
|
||||
[section References]
|
||||
|
||||
# [@http://boost.org/libs/iterator/doc/new-iter-concepts.html New Iterator Concepts],
|
||||
# [@http://www.boost.org/libs/iterator/doc/new-iter-concepts.html New Iterator Concepts],
|
||||
David Abrahams, Jeremy Siek, Thomas Witt, 2004-11-01.
|
||||
# [@http://boost.org/libs/tuple/doc/tuple_users_guide.html The Boost Tuple Library],
|
||||
# [@http://www.boost.org/libs/tuple The Boost Tuple Library],
|
||||
Jaakko Jarvi, 2001.
|
||||
# [@http://www.boost.org/libs/spirit/ Spirit Parser Library],
|
||||
# [@http://www.boost.org/libs/spirit Spirit Parser Library],
|
||||
Joel de Guzman, 2001-2006.
|
||||
# [@http://www.boost.org/libs/mpl/ The Boost MPL Library],
|
||||
# [@http://www.boost.org/libs/mpl The Boost MPL Library],
|
||||
Aleksey Gurtovoy and David Abrahams, 2002-2004.
|
||||
# [@http://www.boost.org/doc/html/array.html Boost Array],
|
||||
# [@http://www.boost.org/libs/array The Boost Array Library],
|
||||
Nicolai Josuttis, 2002-2004.
|
||||
# [@http://www.sgi.com/tech/stl/ Standard Template Library Programmer's Guide],
|
||||
Hewlett-Packard Company, 1994.
|
||||
# [@http://www.boost.org/doc/html/ref.html Boost.Ref],
|
||||
# [@http://www.boost.org/libs/core/ref.html Boost.Core / Ref utility],
|
||||
Jaakko Jarvi, Peter Dimov, Douglas Gregor, Dave Abrahams, 1999-2002.
|
||||
# [@http://www.boost.org/libs/hana The Boost Hana Library],
|
||||
Louis Dionne, 2017.
|
||||
|
||||
[endsect]
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -26,7 +26,13 @@ namespace boost { namespace fusion { namespace detail
|
||||
BOOST_FUSION_BARRIER_BEGIN
|
||||
|
||||
template <int size>
|
||||
struct as_deque;
|
||||
struct as_deque
|
||||
{
|
||||
BOOST_STATIC_ASSERT_MSG(
|
||||
size <= FUSION_MAX_DEQUE_SIZE
|
||||
, "FUSION_MAX_DEQUE_SIZE limit is too low"
|
||||
);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct as_deque<0>
|
||||
|
@ -13,6 +13,11 @@
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <boost/fusion/iterator/next.hpp>
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && BOOST_WORKAROUND(BOOST_GCC, / 100 == 404)
|
||||
#include <boost/core/enable_if.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#endif
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct fusion_sequence_tag;
|
||||
@ -114,8 +119,13 @@ namespace boost { namespace fusion { namespace detail
|
||||
{}
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
#if BOOST_WORKAROUND(BOOST_GCC, / 100 == 404)
|
||||
template <typename Value_, typename = typename enable_if<is_same<Value_, Value> >::type>
|
||||
#else
|
||||
typedef Value Value_;
|
||||
#endif
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
keyed_element(Value&& value, Rest&& rest)
|
||||
keyed_element(Value_&& value, Rest&& rest)
|
||||
: Rest(std::move(rest))
|
||||
, value_(BOOST_FUSION_FWD_ELEM(Value, value))
|
||||
{}
|
||||
|
@ -70,6 +70,10 @@ namespace boost { namespace fusion
|
||||
cons(cons<Car2, Cdr2> const& rhs)
|
||||
: car(rhs.car), cdr(rhs.cdr) {}
|
||||
|
||||
#if BOOST_WORKAROUND(BOOST_GCC, / 100 == 406) && !defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS)
|
||||
// Workaround for `array used as initializer` compile error on gcc 4.6 w/ c++0x.
|
||||
template <typename = void>
|
||||
#endif
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
cons(cons const& rhs)
|
||||
: car(rhs.car), cdr(rhs.cdr) {}
|
||||
|
@ -25,7 +25,13 @@ namespace boost { namespace fusion { namespace detail
|
||||
BOOST_FUSION_BARRIER_BEGIN
|
||||
|
||||
template <int size, bool is_assoc>
|
||||
struct as_map;
|
||||
struct as_map
|
||||
{
|
||||
BOOST_STATIC_ASSERT_MSG(
|
||||
size <= FUSION_MAX_MAP_SIZE
|
||||
, "FUSION_MAX_MAP_SIZE limit is too low"
|
||||
);
|
||||
};
|
||||
|
||||
template <bool is_assoc>
|
||||
struct as_map<0, is_assoc>
|
||||
|
@ -125,11 +125,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
}
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
value_type get_val(mpl::identity<key_type>);
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
pair_type get_val(mpl::int_<index>);
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
value_type get_val(mpl::identity<key_type>) const;
|
||||
mpl::identity<value_type> get_val(mpl::identity<key_type>) const;
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
pair_type get_val(mpl::int_<index>) const;
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2013 Joel de Guzman
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -8,10 +9,6 @@
|
||||
#define BOOST_FUSION_MAP_DETAIL_VALUE_AT_KEY_IMPL_02042013_0821
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/detail/access.hpp>
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/mpl/at.hpp>
|
||||
#include <boost/mpl/identity.hpp>
|
||||
#include <boost/utility/declval.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
@ -29,9 +26,9 @@ namespace boost { namespace fusion
|
||||
template <typename Sequence, typename Key>
|
||||
struct apply
|
||||
{
|
||||
typedef
|
||||
decltype(boost::declval<Sequence>().get_val(mpl::identity<Key>()))
|
||||
type;
|
||||
typedef typename BOOST_FUSION_IDENTIFIED_TYPE((
|
||||
boost::declval<Sequence>().get_val(mpl::identity<Key>())
|
||||
)) type;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -67,24 +67,21 @@ namespace boost { namespace fusion
|
||||
: base_type(std::forward<map>(seq))
|
||||
{}
|
||||
|
||||
template <typename Sequence>
|
||||
template <typename Sequence, typename = typename enable_if<traits::is_sequence<Sequence>>::type>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
map(Sequence const& seq
|
||||
, typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler)
|
||||
map(Sequence const& seq)
|
||||
: base_type(begin(seq), detail::map_impl_from_iterator())
|
||||
{}
|
||||
|
||||
template <typename Sequence>
|
||||
template <typename Sequence, typename = typename enable_if<traits::is_sequence<Sequence>>::type>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
map(Sequence& seq
|
||||
, typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler)
|
||||
map(Sequence& seq)
|
||||
: base_type(begin(seq), detail::map_impl_from_iterator())
|
||||
{}
|
||||
|
||||
template <typename Sequence>
|
||||
template <typename Sequence, typename = typename enable_if<traits::is_sequence<Sequence>>::type>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
map(Sequence&& seq
|
||||
, typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler)
|
||||
map(Sequence&& seq)
|
||||
: base_type(begin(seq), detail::map_impl_from_iterator())
|
||||
{}
|
||||
|
||||
|
@ -25,7 +25,13 @@ namespace boost { namespace fusion { namespace detail
|
||||
BOOST_FUSION_BARRIER_BEGIN
|
||||
|
||||
template <int size>
|
||||
struct as_set;
|
||||
struct as_set
|
||||
{
|
||||
BOOST_STATIC_ASSERT_MSG(
|
||||
size <= FUSION_MAX_SET_SIZE
|
||||
, "FUSION_MAX_SET_SIZE limit is too low"
|
||||
);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct as_set<0>
|
||||
|
@ -25,7 +25,13 @@ namespace boost { namespace fusion { namespace detail
|
||||
BOOST_FUSION_BARRIER_BEGIN
|
||||
|
||||
template <int size>
|
||||
struct as_vector;
|
||||
struct as_vector
|
||||
{
|
||||
BOOST_STATIC_ASSERT_MSG(
|
||||
size <= FUSION_MAX_VECTOR_SIZE
|
||||
, "FUSION_MAX_VECTOR_SIZE limit is too low"
|
||||
);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct as_vector<0>
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2014 Kohei Takahashi
|
||||
Copyright (c) 2014,2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -7,7 +7,6 @@
|
||||
#ifndef FUSION_VALUE_AT_IMPL_16122014_1641
|
||||
#define FUSION_VALUE_AT_IMPL_16122014_1641
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/container/vector/detail/config.hpp>
|
||||
|
||||
@ -23,6 +22,7 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#include <boost/fusion/container/vector/vector_fwd.hpp>
|
||||
#include <boost/type_traits/declval.hpp>
|
||||
#include <boost/mpl/identity.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@ -35,7 +35,7 @@ namespace boost { namespace fusion
|
||||
|
||||
template <std::size_t N, typename U>
|
||||
static inline BOOST_FUSION_GPU_ENABLED
|
||||
U value_at_impl(store<N, U> const volatile*);
|
||||
mpl::identity<U> value_at_impl(store<N, U> const volatile*);
|
||||
}
|
||||
|
||||
namespace extension
|
||||
@ -49,9 +49,9 @@ namespace boost { namespace fusion
|
||||
template <typename Sequence, typename N>
|
||||
struct apply
|
||||
{
|
||||
typedef
|
||||
decltype(vector_detail::value_at_impl<N::value>(boost::declval<Sequence*>()))
|
||||
type;
|
||||
typedef typename BOOST_FUSION_IDENTIFIED_TYPE((
|
||||
vector_detail::value_at_impl<N::value>(boost::declval<Sequence*>())
|
||||
)) type;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -247,14 +247,14 @@ namespace boost { namespace fusion
|
||||
|
||||
template <typename J>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
auto at_impl(J) -> decltype(at_detail<J::value>(this))
|
||||
auto at_impl(J) -> decltype(at_detail<J::value>(&std::declval<vector_data&>()))
|
||||
{
|
||||
return at_detail<J::value>(this);
|
||||
}
|
||||
|
||||
template <typename J>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
auto at_impl(J) const -> decltype(at_detail<J::value>(this))
|
||||
auto at_impl(J) const -> decltype(at_detail<J::value>(&std::declval<vector_data const&>()))
|
||||
{
|
||||
return at_detail<J::value>(this);
|
||||
}
|
||||
|
@ -8,7 +8,6 @@
|
||||
#define FUSION_CATEGORY_OF_07202005_0308
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/detail/category_of.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
#include <boost/type_traits/is_base_of.hpp>
|
||||
|
||||
@ -44,7 +43,10 @@ namespace boost { namespace fusion
|
||||
struct category_of_impl
|
||||
{
|
||||
template<typename T>
|
||||
struct apply : detail::fusion_category_of<T> {};
|
||||
struct apply
|
||||
{
|
||||
typedef typename T::category type;
|
||||
};
|
||||
};
|
||||
|
||||
template <>
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2014 Eric Niebler
|
||||
Copyright (c) 2014 Kohei Takahashi
|
||||
Copyright (c) 2014,2015,2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -96,4 +96,24 @@ namespace std
|
||||
#define BOOST_FUSION_CONSTEXPR_THIS BOOST_CONSTEXPR
|
||||
#endif
|
||||
|
||||
|
||||
// Workaround for compiler which doesn't compile decltype(expr)::type.
|
||||
// It expects decltype(expr) deduced as mpl::identity<T>.
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) || BOOST_WORKAROUND(BOOST_GCC, < 40700)
|
||||
# include <boost/mpl/identity.hpp>
|
||||
# define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \
|
||||
boost::mpl::identity<decltype parenthesized_expr>::type::type
|
||||
#else
|
||||
# define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \
|
||||
decltype parenthesized_expr ::type
|
||||
#endif
|
||||
|
||||
|
||||
// Workaround for GCC 4.6 that rejects defaulted function with noexcept.
|
||||
#if BOOST_WORKAROUND(BOOST_GCC, / 100 == 406)
|
||||
# define BOOST_FUSION_NOEXCEPT_ON_DEFAULTED
|
||||
#else
|
||||
# define BOOST_FUSION_NOEXCEPT_ON_DEFAULTED BOOST_NOEXCEPT
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2016 Lee Clagett
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -8,6 +9,7 @@
|
||||
#define FUSION_AND_07152016_1625
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/config/workaround.hpp>
|
||||
#include <boost/type_traits/integral_constant.hpp>
|
||||
|
||||
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
||||
@ -15,6 +17,8 @@
|
||||
#endif
|
||||
|
||||
namespace boost { namespace fusion { namespace detail {
|
||||
#if defined(BOOST_NO_CXX17_FOLD_EXPRESSIONS) \
|
||||
|| BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913))
|
||||
template<typename ...Cond>
|
||||
struct and_impl : false_type {};
|
||||
|
||||
@ -34,6 +38,10 @@ namespace boost { namespace fusion { namespace detail {
|
||||
recursive. */
|
||||
template<typename ...Cond>
|
||||
struct and_ : and_impl1<Cond::value...> {};
|
||||
#else
|
||||
template <typename ...Cond>
|
||||
struct and_ : integral_constant<bool, ((bool)Cond::value && ...)> {};
|
||||
#endif
|
||||
}}}
|
||||
|
||||
#endif // FUSION_AND_07152016_1625
|
||||
|
@ -1,19 +0,0 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(FUSION_CATEGORY_OF_07212005_1025)
|
||||
#define FUSION_CATEGORY_OF_07212005_1025
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
struct fusion_category_of
|
||||
{
|
||||
typedef typename T::category type;
|
||||
};
|
||||
}}}
|
||||
|
||||
#endif
|
@ -9,18 +9,17 @@
|
||||
#define FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/sequence_base.hpp>
|
||||
#include <boost/fusion/support/detail/is_native_fusion_sequence.hpp>
|
||||
#include <boost/mpl/is_sequence.hpp>
|
||||
#include <boost/mpl/and.hpp>
|
||||
#include <boost/mpl/not.hpp>
|
||||
#include <boost/type_traits/is_convertible.hpp>
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
struct is_mpl_sequence
|
||||
: mpl::and_<
|
||||
mpl::not_<is_convertible<T, from_sequence_convertible_type> >
|
||||
mpl::not_<is_native_fusion_sequence<T> >
|
||||
, mpl::is_sequence<T> >
|
||||
{};
|
||||
}}}
|
||||
|
@ -0,0 +1,27 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#ifndef BOOST_FUSION_IS_NATIVE_FUSION_SEQUENCE
|
||||
#define BOOST_FUSION_IS_NATIVE_FUSION_SEQUENCE
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/sequence_base.hpp>
|
||||
#include <boost/mpl/and.hpp>
|
||||
#include <boost/type_traits/is_complete.hpp>
|
||||
#include <boost/type_traits/is_convertible.hpp>
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct is_native_fusion_sequence
|
||||
: mpl::and_<
|
||||
is_complete<Sequence>
|
||||
, is_convertible<Sequence, detail::from_sequence_convertible_type>
|
||||
>
|
||||
{};
|
||||
}}}
|
||||
|
||||
#endif
|
@ -1,19 +0,0 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(FUSION_IS_VIEW_03202006_0018)
|
||||
#define FUSION_IS_VIEW_03202006_0018
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
struct fusion_is_view
|
||||
{
|
||||
typedef typename T::is_view type;
|
||||
};
|
||||
}}}
|
||||
|
||||
#endif
|
@ -1,16 +0,0 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(FUSION_UNKNOWN_KEY_09242005_1219)
|
||||
#define FUSION_UNKNOWN_KEY_09242005_1219
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <int index>
|
||||
struct unknown_key {};
|
||||
}}}
|
||||
|
||||
#endif
|
@ -10,11 +10,10 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/sequence_base.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
#include <boost/mpl/is_sequence.hpp>
|
||||
#include <boost/mpl/or.hpp>
|
||||
#include <boost/fusion/support/detail/is_native_fusion_sequence.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/mpl/is_sequence.hpp>
|
||||
#include <boost/type_traits/is_convertible.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@ -67,10 +66,7 @@ namespace boost { namespace fusion
|
||||
>
|
||||
{};
|
||||
|
||||
template <typename Sequence, typename Enable = void>
|
||||
struct is_native_fusion_sequence
|
||||
: is_convertible<Sequence, fusion::detail::from_sequence_convertible_type>
|
||||
{};
|
||||
using detail::is_native_fusion_sequence;
|
||||
}
|
||||
}}
|
||||
|
||||
|
@ -9,7 +9,6 @@
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/fusion/support/detail/is_view.hpp>
|
||||
#include <boost/fusion/support/tag_of.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
@ -28,8 +27,9 @@ namespace boost { namespace fusion
|
||||
{
|
||||
template <typename T>
|
||||
struct apply
|
||||
: detail::fusion_is_view<T>
|
||||
{};
|
||||
{
|
||||
typedef typename T::is_view type;
|
||||
};
|
||||
};
|
||||
|
||||
template <>
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -10,7 +11,6 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <iosfwd>
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#if defined(BOOST_MSVC)
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable: 4522) // multiple assignment operators specified warning
|
||||
@ -23,9 +23,16 @@ namespace boost { namespace fusion
|
||||
struct unused_type
|
||||
{
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
unused_type() BOOST_NOEXCEPT
|
||||
BOOST_DEFAULTED_FUNCTION(
|
||||
unused_type() BOOST_FUSION_NOEXCEPT_ON_DEFAULTED,
|
||||
{
|
||||
}
|
||||
})
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_DEFAULTED_FUNCTION(
|
||||
unused_type(unused_type const&) BOOST_FUSION_NOEXCEPT_ON_DEFAULTED,
|
||||
{
|
||||
})
|
||||
|
||||
template <typename T>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
@ -33,35 +40,12 @@ namespace boost { namespace fusion
|
||||
{
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
BOOST_FUSION_CONSTEXPR_THIS BOOST_FUSION_GPU_ENABLED
|
||||
unused_type const&
|
||||
operator=(T const&) const BOOST_NOEXCEPT
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
unused_type&
|
||||
operator=(T const&) BOOST_NOEXCEPT
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
BOOST_FUSION_CONSTEXPR_THIS BOOST_FUSION_GPU_ENABLED
|
||||
unused_type const&
|
||||
operator=(unused_type const&) const BOOST_NOEXCEPT
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
unused_type&
|
||||
operator=(unused_type const&) BOOST_NOEXCEPT
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
BOOST_CONSTEXPR_OR_CONST unused_type unused = unused_type();
|
||||
|
@ -9,8 +9,8 @@
|
||||
<toolset name="msvc-11.0"/>
|
||||
<toolset name="msvc-12.0"/>
|
||||
<toolset name="qcc-4.4.2_x86"/>
|
||||
<toolset name="gcc-gnu-4.4~c++0x*"/>
|
||||
<toolset name="gcc-gnu-4.4~gnu0x*"/>
|
||||
<toolset name="gcc-4.4~c++0x*"/>
|
||||
<toolset name="gcc-4.4~gnu0x*"/>
|
||||
<note author="Kohei Takahashi">
|
||||
The compiler doesn't generate defaulted move ctor/assgin thus
|
||||
perform copy construction/assginment. Even though such case,
|
||||
|
49
test/Jamfile
49
test/Jamfile
@ -1,7 +1,7 @@
|
||||
##==============================================================================
|
||||
# Copyright (c) 2003-2006 Joel de Guzman
|
||||
# Copyright (c) 2013 Mateusz Loskot
|
||||
# Copyright (c) 2014-2017 Kohei Takahashi
|
||||
# Copyright (c) 2014-2018 Kohei Takahashi
|
||||
#
|
||||
# Use, modification and distribution is subject to the Boost Software
|
||||
# License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@ -9,10 +9,17 @@
|
||||
#==============================================================================
|
||||
# bring in rules for testing
|
||||
import testing ;
|
||||
import os ;
|
||||
import ../../config/checks/config : requires ;
|
||||
|
||||
if [ os.environ CI ]
|
||||
{
|
||||
CI_DEFINES = <define>CI_SKIP_KNOWN_FAILURE=1 ;
|
||||
}
|
||||
|
||||
project
|
||||
: requirements
|
||||
$(CI_DEFINES)
|
||||
;
|
||||
|
||||
{
|
||||
@ -35,7 +42,8 @@ project
|
||||
[ run algorithm/insert.cpp ]
|
||||
[ run algorithm/insert_range.cpp ]
|
||||
[ run algorithm/iter_fold.cpp ]
|
||||
[ run algorithm/move.cpp ]
|
||||
[ run algorithm/move.cpp : :
|
||||
: [ requires cxx11_rvalue_references ] ]
|
||||
[ run algorithm/none.cpp ]
|
||||
[ run algorithm/pop_back.cpp ]
|
||||
[ run algorithm/pop_front.cpp ]
|
||||
@ -99,7 +107,8 @@ project
|
||||
[ compile sequence/deque_is_constructible.cpp ]
|
||||
[ run sequence/deque_make.cpp ]
|
||||
[ run sequence/deque_misc.cpp ]
|
||||
[ run sequence/deque_move.cpp ]
|
||||
[ run sequence/deque_move.cpp : :
|
||||
: [ requires cxx11_rvalue_references ] ]
|
||||
[ run sequence/deque_mutate.cpp ]
|
||||
[ run sequence/deque_nest.cpp ]
|
||||
[ run sequence/deque_tie.cpp ]
|
||||
@ -113,7 +122,8 @@ project
|
||||
[ run sequence/map_construction.cpp ]
|
||||
[ run sequence/map_copy.cpp ]
|
||||
[ run sequence/map_misc.cpp ]
|
||||
[ run sequence/map_move.cpp ]
|
||||
[ run sequence/map_move.cpp : :
|
||||
: [ requires cxx11_rvalue_references ] ]
|
||||
[ run sequence/map_mutate.cpp ]
|
||||
[ run sequence/map_tie.cpp ]
|
||||
[ run sequence/nil.cpp ]
|
||||
@ -152,7 +162,8 @@ project
|
||||
[ run sequence/vector_iterator.cpp ]
|
||||
[ run sequence/vector_make.cpp ]
|
||||
[ run sequence/vector_misc.cpp ]
|
||||
[ run sequence/vector_move.cpp ]
|
||||
[ run sequence/vector_move.cpp : :
|
||||
: [ requires cxx11_rvalue_references ] ]
|
||||
[ run sequence/vector_mutate.cpp ]
|
||||
[ run sequence/vector_n.cpp ]
|
||||
[ run sequence/vector_nest.cpp ]
|
||||
@ -197,22 +208,28 @@ project
|
||||
[ run sequence/adt_attribute_proxy.cpp ]
|
||||
[ run sequence/define_struct.cpp ]
|
||||
[ run sequence/define_struct_empty.cpp ]
|
||||
[ run sequence/define_struct_move.cpp ]
|
||||
[ run sequence/define_struct_move.cpp : :
|
||||
: [ requires cxx11_rvalue_references ] ]
|
||||
[ run sequence/define_struct_inline.cpp ]
|
||||
[ run sequence/define_struct_inline_empty.cpp ]
|
||||
[ run sequence/define_struct_inline_move.cpp ]
|
||||
[ run sequence/define_struct_inline_move.cpp : :
|
||||
: [ requires cxx11_rvalue_references ] ]
|
||||
[ run sequence/define_assoc_struct.cpp ]
|
||||
[ run sequence/define_assoc_struct_empty.cpp ]
|
||||
[ run sequence/define_assoc_struct_move.cpp ]
|
||||
[ run sequence/define_assoc_struct_move.cpp : :
|
||||
: [ requires cxx11_rvalue_references ] ]
|
||||
[ run sequence/define_tpl_struct.cpp ]
|
||||
[ run sequence/define_tpl_struct_empty.cpp ]
|
||||
[ run sequence/define_tpl_struct_move.cpp ]
|
||||
[ run sequence/define_tpl_struct_move.cpp : :
|
||||
: [ requires cxx11_rvalue_references ] ]
|
||||
[ run sequence/define_tpl_struct_inline.cpp ]
|
||||
[ run sequence/define_tpl_struct_inline_empty.cpp ]
|
||||
[ run sequence/define_tpl_struct_inline_move.cpp ]
|
||||
[ run sequence/define_tpl_struct_inline_move.cpp : :
|
||||
: [ requires cxx11_rvalue_references ] ]
|
||||
[ run sequence/define_assoc_tpl_struct.cpp ]
|
||||
[ run sequence/define_assoc_tpl_struct_empty.cpp ]
|
||||
[ run sequence/define_assoc_tpl_struct_move.cpp ]
|
||||
[ run sequence/define_assoc_tpl_struct_move.cpp : :
|
||||
: [ requires cxx11_rvalue_references ] ]
|
||||
[ run sequence/std_tuple.cpp : :
|
||||
: [ requires cxx11_variadic_templates cxx11_hdr_tuple ] ]
|
||||
[ run sequence/std_tuple_iterator.cpp : :
|
||||
@ -220,6 +237,7 @@ project
|
||||
[ run sequence/ref_vector.cpp ]
|
||||
[ run sequence/flatten_view.cpp ]
|
||||
[ compile sequence/github-159.cpp ]
|
||||
[ run sequence/github-176.cpp ]
|
||||
|
||||
[ compile sequence/size.cpp ]
|
||||
|
||||
@ -237,14 +255,19 @@ project
|
||||
[ run functional/invoke_procedure.cpp ]
|
||||
[ run sequence/swap.cpp ]
|
||||
|
||||
[ compile support/is_sequence.cpp ]
|
||||
[ compile support/pair_deque.cpp ]
|
||||
[ compile support/pair_list.cpp ]
|
||||
[ compile support/pair_map.cpp ]
|
||||
[ compile support/pair_set.cpp ]
|
||||
[ compile support/pair_vector.cpp ]
|
||||
[ compile support/pair_nest.cpp ]
|
||||
[ compile support/index_sequence.cpp ]
|
||||
[ compile support/and.cpp ]
|
||||
[ compile support/index_sequence.cpp
|
||||
: [ requires cxx11_variadic_templates ] ]
|
||||
[ compile support/and.cpp
|
||||
: [ requires cxx11_variadic_templates ] ]
|
||||
[ compile support/tag_of.cpp ]
|
||||
[ compile support/unused.cpp ]
|
||||
|
||||
# [ compile-fail xxx.cpp ]
|
||||
|
||||
|
@ -1,11 +1,12 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 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)
|
||||
==============================================================================*/
|
||||
#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/algorithm/query/all.hpp>
|
||||
@ -28,6 +29,19 @@ namespace
|
||||
|
||||
int search;
|
||||
};
|
||||
|
||||
struct mutable_search_for : search_for
|
||||
{
|
||||
explicit mutable_search_for(int in_search)
|
||||
: search_for(in_search)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
bool operator()(T const& v)
|
||||
{
|
||||
return search_for::operator()(v);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
int
|
||||
@ -58,11 +72,20 @@ main()
|
||||
}
|
||||
|
||||
{
|
||||
typedef boost::mpl::vector_c<int, 1> mpl_vec;
|
||||
boost::fusion::vector<int, short, double> t(1, 2, 3.3);
|
||||
BOOST_TEST(!boost::fusion::all(t, search_for(1)));
|
||||
BOOST_TEST(!boost::fusion::all(t, mutable_search_for(1)));
|
||||
}
|
||||
|
||||
{
|
||||
typedef boost::mpl::vector_c<int, 1, 1, 1> mpl_vec;
|
||||
// We cannot use lambda here as mpl vec iterators return
|
||||
// rvalues, and lambda needs lvalues.
|
||||
BOOST_TEST(boost::fusion::all(mpl_vec(), search_for(1)));
|
||||
BOOST_TEST(!boost::fusion::all(mpl_vec(), search_for(2)));
|
||||
|
||||
BOOST_TEST(boost::fusion::all(mpl_vec(), mutable_search_for(1)));
|
||||
BOOST_TEST(!boost::fusion::all(mpl_vec(), mutable_search_for(2)));
|
||||
}
|
||||
|
||||
return boost::report_errors();
|
||||
|
@ -2,11 +2,12 @@
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005 Eric Niebler
|
||||
Copyright (c) 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)
|
||||
==============================================================================*/
|
||||
#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/algorithm/query/any.hpp>
|
||||
@ -29,6 +30,19 @@ namespace
|
||||
|
||||
int search;
|
||||
};
|
||||
|
||||
struct mutable_search_for : search_for
|
||||
{
|
||||
explicit mutable_search_for(int in_search)
|
||||
: search_for(in_search)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
bool operator()(T const& v)
|
||||
{
|
||||
return search_for::operator()(v);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
int
|
||||
@ -44,12 +58,21 @@ main()
|
||||
BOOST_TEST(!boost::fusion::any(t, boost::lambda::_1 == 3));
|
||||
}
|
||||
|
||||
{
|
||||
boost::fusion::vector<int, short, double> t(1, 2, 3.3);
|
||||
BOOST_TEST(boost::fusion::any(t, search_for(1)));
|
||||
BOOST_TEST(boost::fusion::any(t, mutable_search_for(1)));
|
||||
}
|
||||
|
||||
{
|
||||
typedef boost::mpl::vector_c<int, 1, 2, 3> mpl_vec;
|
||||
// We cannot use lambda here as mpl vec iterators return
|
||||
// rvalues, and lambda needs lvalues.
|
||||
BOOST_TEST(boost::fusion::any(mpl_vec(), search_for(2)));
|
||||
BOOST_TEST(!boost::fusion::any(mpl_vec(), search_for(4)));
|
||||
|
||||
BOOST_TEST(boost::fusion::any(mpl_vec(), mutable_search_for(2)));
|
||||
BOOST_TEST(!boost::fusion::any(mpl_vec(), mutable_search_for(4)));
|
||||
}
|
||||
|
||||
return boost::report_errors();
|
||||
|
@ -1,11 +1,12 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005 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/adapted/mpl.hpp>
|
||||
#include <boost/fusion/algorithm/query/count_if.hpp>
|
||||
@ -18,20 +19,29 @@ struct bind1st<F<T> > : public F<T>
|
||||
{
|
||||
T n;
|
||||
bind1st(T n) : n(n) { }
|
||||
bool operator()(T v) { return F<T>::operator()(n, v); }
|
||||
bool operator()(T v) const { return F<T>::operator()(n, v); }
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct mutable_equal_to : std::equal_to<T>
|
||||
{
|
||||
bool operator()(T l, T r) { return std::equal_to<T>::operator()(l, r); }
|
||||
};
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
{
|
||||
boost::fusion::vector<int, short, double> t(1, 2, 3.3);
|
||||
BOOST_TEST(boost::fusion::count_if(t, bind1st<std::equal_to<double> >(2)) == 1);
|
||||
BOOST_TEST(boost::fusion::count_if(t, bind1st<mutable_equal_to<double> >(2)) == 1);
|
||||
}
|
||||
|
||||
{
|
||||
boost::fusion::vector<int, short, double> t(1, 2, 3.3);
|
||||
BOOST_TEST(boost::fusion::count_if(t, bind1st<std::equal_to<double> >(3)) == 0);
|
||||
BOOST_TEST(boost::fusion::count_if(t, bind1st<mutable_equal_to<double> >(3)) == 0);
|
||||
}
|
||||
|
||||
{
|
||||
@ -39,6 +49,7 @@ main()
|
||||
// Cannot use lambda here as mpl iterators return rvalues and lambda needs lvalues
|
||||
BOOST_TEST(boost::fusion::count_if(mpl_vec(), bind1st<std::greater_equal<int> >(2)) == 2);
|
||||
BOOST_TEST(boost::fusion::count_if(mpl_vec(), bind1st<std::less<int> >(2)) == 1);
|
||||
BOOST_TEST(boost::fusion::count_if(mpl_vec(), bind1st<mutable_equal_to<int> >(2)) == 1);
|
||||
}
|
||||
|
||||
return boost::report_errors();
|
||||
|
@ -1,27 +1,25 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 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)
|
||||
==============================================================================*/
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
#include <boost/fusion/adapted/mpl.hpp>
|
||||
#include <boost/fusion/sequence/io/out.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/at.hpp>
|
||||
#include <boost/fusion/container/generation/make_vector.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/fold.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/accumulate.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/fold.hpp>
|
||||
#include <boost/fusion/container/generation/make_vector.hpp>
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
#include <boost/fusion/sequence/io/out.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/mpl/next.hpp>
|
||||
#include <boost/mpl/int.hpp>
|
||||
#include <boost/mpl/next.hpp>
|
||||
#include <boost/mpl/vector.hpp>
|
||||
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#include <boost/type_traits/remove_const.hpp>
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
#include <boost/type_traits/is_reference.hpp>
|
||||
|
||||
#include <string>
|
||||
|
||||
@ -130,7 +128,7 @@ struct functor
|
||||
}
|
||||
};
|
||||
|
||||
struct visitor
|
||||
struct mutable_visitor
|
||||
{
|
||||
typedef int result_type;
|
||||
|
||||
@ -248,7 +246,7 @@ main()
|
||||
|
||||
{
|
||||
boost::fusion::vector<long> vec;
|
||||
visitor v;
|
||||
mutable_visitor v;
|
||||
boost::fusion::fold(vec, 0, v);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -1,13 +1,9 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2014 Kohei Takahashi
|
||||
Copyright (c) 2014,2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#include <boost/config.hpp>
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
#include <boost/fusion/container/list/list.hpp>
|
||||
@ -29,12 +25,3 @@ int main()
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int main()
|
||||
{
|
||||
// no thing to do
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -1,11 +1,12 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 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)
|
||||
==============================================================================*/
|
||||
#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/algorithm/query/none.hpp>
|
||||
@ -28,6 +29,19 @@ namespace
|
||||
|
||||
int search;
|
||||
};
|
||||
|
||||
struct mutable_search_for : search_for
|
||||
{
|
||||
explicit mutable_search_for(int in_search)
|
||||
: search_for(in_search)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
bool operator()(T const& v)
|
||||
{
|
||||
return search_for::operator()(v);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
int
|
||||
@ -45,12 +59,24 @@ main()
|
||||
BOOST_TEST((!boost::fusion::none(t, boost::lambda::_1 < 3)));
|
||||
}
|
||||
|
||||
{
|
||||
boost::fusion::vector<int, short, double> t(1, 2, 3.3);
|
||||
BOOST_TEST(!boost::fusion::none(t, search_for(1)));
|
||||
BOOST_TEST(boost::fusion::none(t, search_for(3)));
|
||||
|
||||
BOOST_TEST(!boost::fusion::none(t, mutable_search_for(1)));
|
||||
BOOST_TEST(boost::fusion::none(t, mutable_search_for(3)));
|
||||
}
|
||||
|
||||
{
|
||||
typedef boost::mpl::vector_c<int, 1, 2, 3> mpl_vec;
|
||||
// We cannot use lambda here as mpl vec iterators return
|
||||
// rvalues, and lambda needs lvalues.
|
||||
BOOST_TEST(boost::fusion::none(mpl_vec(), search_for(4)));
|
||||
BOOST_TEST(!boost::fusion::none(mpl_vec(), search_for(3)));
|
||||
|
||||
BOOST_TEST(boost::fusion::none(mpl_vec(), mutable_search_for(4)));
|
||||
BOOST_TEST(!boost::fusion::none(mpl_vec(), mutable_search_for(3)));
|
||||
}
|
||||
|
||||
return boost::report_errors();
|
||||
|
@ -1,19 +1,16 @@
|
||||
/*=============================================================================
|
||||
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/adapted/mpl.hpp>
|
||||
#include <boost/fusion/container/generation/make_vector.hpp>
|
||||
#include <boost/fusion/sequence/io/out.hpp>
|
||||
#include <boost/fusion/sequence/comparison/equal_to.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/at.hpp>
|
||||
#include <boost/fusion/container/generation/make_vector.hpp>
|
||||
#include <boost/fusion/algorithm/transformation/replace_if.hpp>
|
||||
#include <string>
|
||||
|
||||
struct gt3
|
||||
{
|
||||
@ -24,6 +21,15 @@ struct gt3
|
||||
}
|
||||
};
|
||||
|
||||
struct mutable_gt3 : gt3
|
||||
{
|
||||
template <typename T>
|
||||
bool operator()(T x)
|
||||
{
|
||||
return gt3::operator()(x);
|
||||
}
|
||||
};
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
@ -42,8 +48,18 @@ main()
|
||||
|
||||
{
|
||||
std::cout << replace_if(t1, gt3(), -456) << std::endl;
|
||||
BOOST_TEST((replace_if(t1, gt3(), -456)
|
||||
== make_vector(1, 2, -456, -456, s, -456)));
|
||||
BOOST_TEST_EQ(replace_if(t1, gt3(), -456), make_vector(1, 2, -456, -456, s, -456));
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
char const* s = "Ruby";
|
||||
typedef vector<int, short, double, long, char const*, float> vector_type;
|
||||
vector_type t1(1, 2, 3.3, 4, s, 5.5f);
|
||||
|
||||
{
|
||||
std::cout << replace_if(t1, mutable_gt3(), -456) << std::endl;
|
||||
BOOST_TEST_EQ(replace_if(t1, mutable_gt3(), -456), make_vector(1, 2, -456, -456, s, -456));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -1,13 +1,9 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2016 Kohei Takahashi
|
||||
Copyright (c) 2016,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>
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/adapted/struct/define_assoc_struct.hpp>
|
||||
#include <utility>
|
||||
@ -69,10 +65,3 @@ int main()
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int main()
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1,13 +1,9 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2016 Kohei Takahashi
|
||||
Copyright (c) 2016-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>
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/adapted/struct/define_struct_inline.hpp>
|
||||
#include <utility>
|
||||
@ -51,8 +47,8 @@ int main()
|
||||
BOOST_TEST(y.w.value == 42);
|
||||
}
|
||||
|
||||
// Older MSVCs don't generate move ctor by default.
|
||||
#if !(defined(RUNNING_ON_APPVEYOR) && BOOST_WORKAROUND(BOOST_MSVC, < 1900))
|
||||
// Older MSVCs and gcc 4.4 don't generate move ctor by default.
|
||||
#if !(defined(CI_SKIP_KNOWN_FAILURE) && (BOOST_WORKAROUND(BOOST_MSVC, < 1900) || BOOST_WORKAROUND(BOOST_GCC, / 100 == 404)))
|
||||
{
|
||||
ns::value x;
|
||||
ns::value y(std::move(x)); // move
|
||||
@ -70,15 +66,8 @@ int main()
|
||||
BOOST_TEST(x.w.value == 0);
|
||||
BOOST_TEST(y.w.value == 0);
|
||||
}
|
||||
#endif // !(appveyor && msvc < 14.0)
|
||||
#endif // !(ci && (msvc < 14.0 || gcc 4.4.x))
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int main()
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1,13 +1,9 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2016 Kohei Takahashi
|
||||
Copyright (c) 2016,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>
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/adapted/struct/define_struct.hpp>
|
||||
#include <utility>
|
||||
@ -68,10 +64,3 @@ int main()
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int main()
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1,13 +1,9 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2016 Kohei Takahashi
|
||||
Copyright (c) 2016-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>
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/adapted/struct/define_struct_inline.hpp>
|
||||
#include <utility>
|
||||
@ -51,8 +47,8 @@ int main()
|
||||
BOOST_TEST(y.w.value == 42);
|
||||
}
|
||||
|
||||
// Older MSVCs don't generate move ctor by default.
|
||||
#if !(defined(RUNNING_ON_APPVEYOR) && BOOST_WORKAROUND(BOOST_MSVC, < 1900))
|
||||
// Older MSVCs and gcc 4.4 don't generate move ctor by default.
|
||||
#if !(defined(CI_SKIP_KNOWN_FAILURE) && (BOOST_WORKAROUND(BOOST_MSVC, < 1900) || BOOST_WORKAROUND(BOOST_GCC, / 100 == 404)))
|
||||
{
|
||||
ns::value<wrapper> x;
|
||||
ns::value<wrapper> y(std::move(x)); // move
|
||||
@ -70,15 +66,8 @@ int main()
|
||||
BOOST_TEST(x.w.value == 0);
|
||||
BOOST_TEST(y.w.value == 0);
|
||||
}
|
||||
#endif // !(appveyor && msvc < 14.0)
|
||||
#endif // !(ci && (msvc < 14.0 || gcc 4.4.x))
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int main()
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1,13 +1,9 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2016 Kohei Takahashi
|
||||
Copyright (c) 2016,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>
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/adapted/struct/define_struct.hpp>
|
||||
#include <utility>
|
||||
@ -68,10 +64,3 @@ int main()
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int main()
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1,16 +1,11 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2012 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)
|
||||
==============================================================================*/
|
||||
#define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES // $$$ JDG temp $$$
|
||||
|
||||
|
||||
#include <boost/config.hpp>
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
|
||||
#define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
|
||||
#include <boost/fusion/container/deque/deque.hpp>
|
||||
|
||||
#define FUSION_SEQUENCE boost::fusion::deque<std::vector<x>>
|
||||
@ -18,16 +13,9 @@
|
||||
|
||||
#include "move.hpp"
|
||||
|
||||
#else
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#endif
|
||||
|
||||
int
|
||||
main()
|
||||
int main()
|
||||
{
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
test();
|
||||
#endif
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
89
test/sequence/github-176.cpp
Normal file
89
test/sequence/github-176.cpp
Normal file
@ -0,0 +1,89 @@
|
||||
/*=============================================================================
|
||||
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/sequence/intrinsic/at.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/at_key.hpp>
|
||||
#include <boost/fusion/container/vector.hpp>
|
||||
#include <boost/fusion/container/list.hpp>
|
||||
#include <boost/fusion/container/deque.hpp>
|
||||
#include <boost/fusion/container/map.hpp>
|
||||
#include <boost/fusion/container/set.hpp>
|
||||
#include <boost/fusion/tuple/tuple.hpp>
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
|
||||
template <typename Sequence>
|
||||
void test_at()
|
||||
{
|
||||
Sequence seq;
|
||||
|
||||
// zero initialized
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[0] == 0);
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[1] == 0);
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 0);
|
||||
|
||||
int (&arr)[3] = boost::fusion::deref(boost::fusion::begin(seq));
|
||||
|
||||
arr[0] = 2;
|
||||
arr[1] = 4;
|
||||
arr[2] = 6;
|
||||
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[0] == 2);
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[1] == 4);
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 6);
|
||||
|
||||
boost::fusion::at_c<0>(seq)[1] = 42;
|
||||
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[0] == 2);
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[1] == 42);
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 6);
|
||||
}
|
||||
|
||||
template <typename T> inline T& value(T& v) { return v; }
|
||||
template <typename K, typename T> inline T& value(boost::fusion::pair<K, T>& v) { return v.second; }
|
||||
|
||||
template <typename Sequence>
|
||||
void test_at_key()
|
||||
{
|
||||
Sequence seq;
|
||||
|
||||
// zero initialized
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[0] == 0);
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[1] == 0);
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[2] == 0);
|
||||
|
||||
int (&arr)[3] = value(boost::fusion::deref(boost::fusion::begin(seq)));
|
||||
|
||||
arr[0] = 2;
|
||||
arr[1] = 4;
|
||||
arr[2] = 6;
|
||||
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[0] == 2);
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[1] == 4);
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[2] == 6);
|
||||
|
||||
boost::fusion::at_key<int[3]>(seq)[1] = 42;
|
||||
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[0] == 2);
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[1] == 42);
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[2] == 6);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
using namespace boost::fusion;
|
||||
|
||||
test_at<vector<int[3]> >();
|
||||
test_at<deque<int[3]> >();
|
||||
test_at<list<int[3]> >();
|
||||
test_at<tuple<int[3]> >();
|
||||
|
||||
#if !BOOST_WORKAROUND(BOOST_GCC, / 100 == 406) || defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS)
|
||||
// FIXME: gcc 4.6 w/ c++0x doesn't like set with array...
|
||||
test_at_key<set<int[3]> >();
|
||||
#endif
|
||||
test_at_key<map<pair<int[3], int[3]> > >();
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2014 Christoph Weiss
|
||||
Copyright (c) 2017 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)
|
||||
@ -11,24 +12,24 @@
|
||||
#include <boost/fusion/sequence/hash.hpp>
|
||||
#include <boost/functional/hash.hpp>
|
||||
|
||||
void
|
||||
hash_test()
|
||||
void hash_test()
|
||||
{
|
||||
using namespace boost::fusion;
|
||||
namespace fusion = boost::fusion;
|
||||
using namespace fusion;
|
||||
|
||||
const FUSION_SEQUENCE<int, char, bool, std::string> v0(42, 'x', false, "Aurea prima");
|
||||
const FUSION_SEQUENCE<int, char, bool, std::string> v1(42, 'x', false, "Aurea prima");
|
||||
BOOST_TEST(hash_value(v0) == hash_value(v1));
|
||||
|
||||
BOOST_TEST(fusion::hash_value(v0) == fusion::hash_value(v1));
|
||||
|
||||
const FUSION_SEQUENCE<int, char, bool, std::string> w(41, 'x', false, "Aurea prima");
|
||||
BOOST_TEST(hash_value(w) != hash_value(v0));
|
||||
|
||||
BOOST_TEST(fusion::hash_value(w) != fusion::hash_value(v0));
|
||||
|
||||
const FUSION_SEQUENCE<int, char, bool, std::string> x(42, 'y', false, "Aurea prima");
|
||||
BOOST_TEST(hash_value(x) != hash_value(v0));
|
||||
|
||||
BOOST_TEST(fusion::hash_value(x) != fusion::hash_value(v0));
|
||||
|
||||
const FUSION_SEQUENCE<int, char, bool, std::string> y(42, 'x', true, "Aurea prima");
|
||||
BOOST_TEST(hash_value(y) != hash_value(v0));
|
||||
|
||||
BOOST_TEST(fusion::hash_value(y) != fusion::hash_value(v0));
|
||||
|
||||
const FUSION_SEQUENCE<int, char, bool, std::string> z(42, 'x', false, "quae vindice nullo");
|
||||
BOOST_TEST(hash_value(z) != hash_value(v0));
|
||||
BOOST_TEST(fusion::hash_value(z) != fusion::hash_value(v0));
|
||||
}
|
||||
|
@ -1,15 +1,11 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2012 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)
|
||||
==============================================================================*/
|
||||
#define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES // $$$ JDG temp $$$
|
||||
|
||||
#include <boost/config.hpp>
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
|
||||
#define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
|
||||
#include <boost/fusion/container/map/map.hpp>
|
||||
|
||||
struct k1 {};
|
||||
@ -23,16 +19,9 @@ struct k2 {};
|
||||
|
||||
#include "move.hpp"
|
||||
|
||||
#else
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#endif
|
||||
|
||||
int
|
||||
main()
|
||||
int main()
|
||||
{
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
test();
|
||||
#endif
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (C) 2016 Lee Clagett
|
||||
Copyright (C) 2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -38,9 +39,7 @@ bool is_convertible(bool has_conversion)
|
||||
}
|
||||
|
||||
// is_constructible has a few requirements
|
||||
#if !defined(BOOST_NO_CXX11_DECLTYPE) && \
|
||||
!defined(BOOST_NO_CXX11_TEMPLATES) && \
|
||||
!defined(BOOST_NO_SFINAE_EXPR)
|
||||
#ifdef BOOST_TT_IS_CONSTRUCTIBLE_CONFORMING
|
||||
|
||||
#define FUSION_TEST_HAS_CONSTRUCTIBLE
|
||||
|
||||
@ -88,7 +87,9 @@ void test_constructible()
|
||||
BOOST_TEST((
|
||||
is_constructible<FUSION_SEQUENCE<convertible>, convertible>(true)
|
||||
));
|
||||
|
||||
|
||||
// boost::is_constructible always fail to test ctor which takes 2 or more arguments on GCC 4.7.
|
||||
#if !BOOST_WORKAROUND(BOOST_GCC, < 40700)
|
||||
BOOST_TEST((
|
||||
is_constructible<FUSION_SEQUENCE<int, int>, int, int>(true)
|
||||
));
|
||||
@ -131,6 +132,7 @@ void test_constructible()
|
||||
FUSION_SEQUENCE<convertible, convertible>, convertible, convertible
|
||||
>(true)
|
||||
));
|
||||
#endif // !(gcc < 4.7)
|
||||
}
|
||||
|
||||
#endif // is_constructible is available
|
||||
|
@ -65,10 +65,13 @@ main()
|
||||
BOOST_TEST((is_constructible<tuple<int>, int, int>(false)));
|
||||
|
||||
BOOST_TEST((is_constructible< tuple<int, int> >(true)));
|
||||
// boost::is_constructible always fail to test ctor which takes 2 or more arguments on GCC 4.7.
|
||||
#if !BOOST_WORKAROUND(BOOST_GCC, < 40700)
|
||||
BOOST_TEST((is_constructible<tuple<int, int>, int, int>(true)));
|
||||
BOOST_TEST((
|
||||
is_constructible<tuple<convertible, convertible>, int, int>(true)
|
||||
));
|
||||
#endif // !(gcc < 4.7)
|
||||
BOOST_TEST((is_constructible<tuple<int, not_convertible>, int, int>(false)));
|
||||
BOOST_TEST((is_constructible<tuple<not_convertible, int>, int, int>(false)));
|
||||
BOOST_TEST((
|
||||
|
@ -1,15 +1,11 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2012 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)
|
||||
==============================================================================*/
|
||||
#define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES // $$$ JDG temp $$$
|
||||
|
||||
#include <boost/config.hpp>
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
|
||||
#define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
|
||||
#define FUSION_SEQUENCE boost::fusion::vector<std::vector<x>>
|
||||
@ -17,16 +13,9 @@
|
||||
|
||||
#include "move.hpp"
|
||||
|
||||
#else
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#endif
|
||||
|
||||
int
|
||||
main()
|
||||
int main()
|
||||
{
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
test();
|
||||
#endif
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
@ -1,33 +1,28 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2016 Lee Clagett
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
|
||||
#include <boost/config.hpp>
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
||||
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/support/detail/and.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/type_traits/integral_constant.hpp>
|
||||
|
||||
int main() {
|
||||
using namespace boost;
|
||||
using namespace boost::fusion::detail;
|
||||
|
||||
BOOST_TEST((and_<>::value));
|
||||
BOOST_TEST(!(and_<false_type>::value));
|
||||
BOOST_TEST((and_<true_type>::value));
|
||||
BOOST_TEST(!(and_<true_type, false_type>::value));
|
||||
BOOST_TEST((and_<true_type, true_type>::value));
|
||||
BOOST_TEST(!(and_<true_type, true_type, false_type>::value));
|
||||
BOOST_TEST((and_<true_type, true_type, true_type>::value));
|
||||
BOOST_TEST((and_<true_type, mpl::true_>::value));
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
#ifdef BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
||||
# error "does not meet requirements"
|
||||
#endif
|
||||
|
||||
#include <boost/fusion/support/detail/and.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/mpl/assert.hpp>
|
||||
|
||||
using namespace boost;
|
||||
using namespace boost::fusion::detail;
|
||||
|
||||
BOOST_MPL_ASSERT((and_<>));
|
||||
BOOST_MPL_ASSERT_NOT((and_<false_type>));
|
||||
BOOST_MPL_ASSERT((and_<true_type>));
|
||||
BOOST_MPL_ASSERT_NOT((and_<true_type, false_type>));
|
||||
BOOST_MPL_ASSERT((and_<true_type, true_type>));
|
||||
BOOST_MPL_ASSERT_NOT((and_<true_type, true_type, false_type>));
|
||||
BOOST_MPL_ASSERT((and_<true_type, true_type, true_type>));
|
||||
BOOST_MPL_ASSERT((and_<true_type, mpl::true_>));
|
||||
|
@ -1,12 +1,14 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2015 Kohei Takahashi
|
||||
Copyright (c) 2015,2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#include <boost/config.hpp>
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
||||
#ifdef BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
||||
# error "does not meet requirements"
|
||||
#endif
|
||||
|
||||
#include <boost/fusion/support/detail/index_sequence.hpp>
|
||||
#include <boost/mpl/assert.hpp>
|
||||
@ -28,5 +30,3 @@ BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<15>::type, detail::
|
||||
BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<16>::type, detail::index_sequence<0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15> >));
|
||||
BOOST_MPL_ASSERT((boost::is_same<detail::make_index_sequence<17>::type, detail::index_sequence<0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16> >));
|
||||
|
||||
#endif
|
||||
|
||||
|
17
test/support/is_sequence.cpp
Normal file
17
test/support/is_sequence.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2018 Louis Dionne
|
||||
|
||||
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_sequence.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
|
||||
|
||||
// Make sure fusion::is_sequence and fusion::is_native_fusion_sequence can be
|
||||
// used with an incomplete type.
|
||||
struct incomplete;
|
||||
BOOST_STATIC_ASSERT(!boost::fusion::traits::is_sequence<incomplete>::value);
|
||||
BOOST_STATIC_ASSERT(!boost::fusion::traits::is_native_fusion_sequence<incomplete>::value);
|
||||
|
||||
int main() { }
|
17
test/support/tag_of.cpp
Normal file
17
test/support/tag_of.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2018 Louis Dionne
|
||||
|
||||
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/tag_of.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
|
||||
|
||||
// Make sure tag_of can be used with an incomplete type.
|
||||
struct incomplete;
|
||||
typedef boost::fusion::traits::tag_of<incomplete>::type Tag;
|
||||
BOOST_STATIC_ASSERT((boost::is_same<Tag, boost::fusion::non_fusion_tag>::value));
|
||||
|
||||
int main() { }
|
95
test/support/unused.cpp
Normal file
95
test/support/unused.cpp
Normal file
@ -0,0 +1,95 @@
|
||||
/*=============================================================================
|
||||
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/unused.hpp>
|
||||
#include <boost/type_traits/detail/yes_no_type.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
#include <utility>
|
||||
#endif
|
||||
|
||||
struct T { };
|
||||
|
||||
void unused_construction()
|
||||
{
|
||||
boost::fusion::unused_type dephault;
|
||||
|
||||
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 = {};
|
||||
#endif
|
||||
|
||||
boost::fusion::unused_type copy_copy BOOST_ATTRIBUTE_UNUSED = dephault;
|
||||
boost::fusion::unused_type copy_direct BOOST_ATTRIBUTE_UNUSED (dephault);
|
||||
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
||||
boost::fusion::unused_type copy_copy_brace_direct BOOST_ATTRIBUTE_UNUSED = {dephault};
|
||||
boost::fusion::unused_type copy_direct_brace BOOST_ATTRIBUTE_UNUSED {dephault};
|
||||
#endif
|
||||
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
boost::fusion::unused_type move_copy BOOST_ATTRIBUTE_UNUSED = std::move(dephault);
|
||||
boost::fusion::unused_type move_direct BOOST_ATTRIBUTE_UNUSED (std::move(dephault));
|
||||
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
||||
boost::fusion::unused_type move_copy_brace_direct BOOST_ATTRIBUTE_UNUSED = {std::move(dephault)};
|
||||
boost::fusion::unused_type move_direct_brace BOOST_ATTRIBUTE_UNUSED {std::move(dephault)};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
T value;
|
||||
|
||||
boost::fusion::unused_type T_copy_copy BOOST_ATTRIBUTE_UNUSED = value;
|
||||
boost::fusion::unused_type T_copy_direct BOOST_ATTRIBUTE_UNUSED (value);
|
||||
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
||||
boost::fusion::unused_type T_copy_copy_brace_direct BOOST_ATTRIBUTE_UNUSED = {value};
|
||||
boost::fusion::unused_type T_copy_direct_brace BOOST_ATTRIBUTE_UNUSED {value};
|
||||
#endif
|
||||
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
boost::fusion::unused_type T_move_copy BOOST_ATTRIBUTE_UNUSED = std::move(value);
|
||||
boost::fusion::unused_type T_move_direct BOOST_ATTRIBUTE_UNUSED (std::move(value));
|
||||
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
||||
boost::fusion::unused_type T_move_copy_brace_direct BOOST_ATTRIBUTE_UNUSED = {std::move(value)};
|
||||
boost::fusion::unused_type T_move_direct_brace BOOST_ATTRIBUTE_UNUSED {std::move(value)};
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void unused_assignment()
|
||||
{
|
||||
boost::fusion::unused_type val1, val2;
|
||||
|
||||
val1 = val2;
|
||||
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
||||
val1 = {};
|
||||
#endif
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
val1 = std::move(val2);
|
||||
#endif
|
||||
|
||||
|
||||
T value;
|
||||
|
||||
val1 = value;
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
val1 = std::move(value);
|
||||
#endif
|
||||
}
|
||||
|
||||
boost::type_traits::yes_type test_unused(boost::fusion::detail::unused_only const&);
|
||||
boost::type_traits::no_type test_unused(...);
|
||||
|
||||
void only_unused()
|
||||
{
|
||||
BOOST_STATIC_ASSERT((sizeof(test_unused(boost::fusion::unused)) == sizeof(boost::type_traits::yes_type)));
|
||||
BOOST_STATIC_ASSERT((sizeof(test_unused(0)) == sizeof(boost::type_traits::no_type)));
|
||||
|
||||
boost::fusion::unused_type my_unused;
|
||||
BOOST_STATIC_ASSERT((sizeof(test_unused(my_unused)) == sizeof(boost::type_traits::yes_type)));
|
||||
}
|
Reference in New Issue
Block a user