Compare commits

..

109 Commits

Author SHA1 Message Date
edddad2b4e Merge branch 'master' into develop 2020-03-26 19:13:17 +08:00
b3c212c47f Merge pull request #216 from Kojoley/fix-comparison-operators-enabler
Fix comparison operators enabler
2019-12-04 14:24:27 +08:00
4778c4c180 Fix comparison operators enabler
Overloads must not be presented until both arguments are Fusion sequences.
2019-12-04 03:04:34 +03:00
5f30a8da60 Merge pull request #212 from Romain-Geissler-1A/delete-private-copy-operators
Explicitly delete all non implemented assignment operators.
2019-11-19 09:40:12 +08:00
fc32335387 Merge pull request #215 from Kojoley/patch-1
CI: Fix Appveyor builds
2019-11-01 08:32:51 +08:00
b5751ae85d CI: Fix Appveyor builds 2019-10-31 22:12:43 +03:00
e5a007579f Merge pull request #214 from Jac1494/develop
Disabled two test which tries to return local address
2019-07-27 10:54:46 +08:00
3e07b3f66b Disabled two test which tries to return local address 2019-07-25 18:10:22 +05:30
08076be2ac Explicitly delete all non implemented assignment operators.
Commit (almost) automatically generated with the following sed command:
sed -i -ne '1h;1!H;${g;s|\n[[:blank:]]*private:\n\([[:blank:]]*\)// silence MSVC warning C4512: assignment operator could not be generated\n\([[:blank:]]*\)\([^\n]\+\);\n|\n\1// silence MSVC warning C4512: assignment operator could not be generated\n\2BOOST_DELETED_FUNCTION(\3)\n|g;p}' $(git ls-files)
2019-05-08 17:11:37 +00:00
4c51811315 Merge pull request #208 from Mike-Devel/min_cmake
[CMake] Add minimal cmake file
2019-03-08 08:55:47 +09:00
19d6c7ad3b Fix is_view_impl to return false for non fusion sequences (just like is_sequence_impl). (reverted from commit 1c693f05bf) 2019-02-18 13:59:58 +08:00
1c693f05bf Fix is_view_impl to return false for non fusion sequences (just like is_sequence_impl). 2019-02-18 12:45:36 +08:00
b180146e3d [CMake] Add disclaimer and turn tabs into spaces 2019-01-28 13:02:40 +01:00
68affa1706 [CMake] Generate cmake target that other libraries can use
... to express their dependency on this library and retrieve any
configuration information such as the include directory, binary
to link to (if any), transitive dependencies, necessary compiler
options or the required c++ standards level.
2019-01-23 19:03:03 +01:00
f0089a640e Merge pull request #205 from Kojoley/sequence-intrinsic-at
Tweak sequence intrinsic at
2019-01-16 18:03:12 +09:00
81a1c2c99a Merge pull request #207 from boostorg/develop
Update CI scripts on master
2019-01-10 17:19:50 +09:00
7b55860d78 Merge pull request #206 from boostorg/update-ci
Update CI scripts
2019-01-10 08:45:02 +09:00
70837a30c5 CI: Added clang-win runner 2019-01-09 18:59:05 +09:00
2e91d0b78e CI: Updated travis compiler matrix 2019-01-09 18:58:40 +09:00
e375a4541b CI: Updated for the recent boost-install changes 2019-01-09 18:33:23 +09:00
908a34a4ed Tweak sequence intrinsic at
A bit clearer and slightly less work for the inliner
2018-11-01 02:01:15 +03:00
62137c0ab7 Merge pull request #204 from boostorg/develop
boost 1.69
2018-10-31 08:23:10 +09:00
753db26073 Merge pull request #198 from Kojoley/vector-simplify-at_impl
vector: Simplify at_impl
2018-10-25 22:12:38 +09:00
309a2d623f Merge pull request #201 from Kojoley/a-slightly-cleaner-n3031-workaround
A slightly cleaner N3031 workaround
2018-10-18 08:17:24 +09:00
b5ba6cbd2b N3031 workaround for compilers without alias templates 2018-10-14 02:49:25 +03:00
2160949150 A slightly cleaner N3031 workaround 2018-10-12 00:34:20 +03:00
6208b083fb Merge pull request #199 from Kojoley/simplify-is_same_size
Simplify is_same_size
2018-10-10 22:34:30 +09:00
95beeba19c Merge pull request #197 from Kojoley/vector_n-test-fix-warning
TST: vector_n: Fixed conversion warning
2018-10-10 22:31:53 +09:00
efe9065b8c vector: Simplify at_impl 2018-10-10 04:19:10 +03:00
d1da8ee746 Simplify is_same_size 2018-10-07 23:17:40 +03:00
a26dcf59ce TST: vector_n: Fixed conversion warning
```
boost\fusion\container\vector\vector.hpp(168): warning C4244: 'initializing': conversion from 'T' to 'T', possible loss of data
1>        with
1>        [
1>            T=int
1>        ]
1>        and
1>        [
1>            T=float
1>        ]
```
2018-10-05 15:54:35 +03:00
6b5c5be9be Merge pull request #195 from Kojoley/patch-2
map_fwd: Do not include the implementation details
2018-09-27 09:35:05 +09:00
8c36079edb Merge pull request #193 from Kojoley/patch-1
Update decltype(expr)::type WA for Clang 3.0
2018-09-27 09:34:43 +09:00
9db262acf5 Fix unit tests that did not return report_errors() 2018-09-24 19:43:33 -04:00
a3abadb884 map_fwd: Do not include the implementation details 2018-09-25 02:21:05 +03:00
3cfbd9826d Fix unit tests that did not return report_errors() 2018-09-17 07:17:29 -04:00
c1fea895c2 Update decltype(expr)::type WA for Clang 3.0 2018-08-17 01:36:56 +03:00
6a3ddd1458 Merge pull request #191 from boostorg/adapt-adt/return-const
adapt/adt: Don't add/remove const on return type of attributes
2018-08-09 08:21:49 +09:00
b1f20628bb Merge pull request #192 from Kojoley/define-is_view-for-non-fusion
Define traits::is_view for non fusion types
2018-08-03 09:46:42 +09:00
b0f0882229 Define traits::is_view for non fusion types 2018-08-03 00:24:10 +03:00
b8fafe04d9 Merge pull request #190 from boostorg/cleanup/filter_view
Cleanup filter_view to improve performance
2018-08-02 12:53:08 +09:00
95b4500898 test: Suppress unused warning 2018-08-02 12:43:26 +09:00
b02cb70760 test: Suppress unused warning on MSVC 2018-08-02 09:37:32 +09:00
77ebd568e1 adapt/adt: Don't add/remove const on return type of attributes
Boost.TypeOf always deduces the type as un-cv-qualified value type, thus const-ized
value type is redundant and inhibiting compiler optimization.
2018-08-01 20:08:24 +09:00
e29b1a07f3 adapt: Cleanup includes 2018-07-28 14:49:50 +09:00
f03bb5ec2e test: Removed unnecessary semi-colon 2018-07-28 14:40:51 +09:00
cc0c684a92 test: Suppress unused warning 2018-07-27 12:45:33 +09:00
c740a4dbad Merge pull request #188 from boostorg/develop
Post beta merge
2018-07-17 21:12:08 +09:00
48f8af3e73 filter_view: Removed redundant filter operation
Iterator constructor always filters and determines right position.
2018-07-07 09:30:17 +09:00
cc3fbc4f5d Removed unused headers 2018-07-07 09:30:17 +09:00
bd96a6bcfb doc: Fixed filter_view parameter requirements 2018-07-07 09:24:55 +09:00
2a95fcc3e9 Merge pull request #186 from boostorg/bugfix/apply
Fixed unintentional MPL substitution in transform_view
2018-07-07 08:11:15 +09:00
47ff2e6cb5 find_if: Improved tag usage
The traversal tag is a bit complex than before.
2018-07-07 07:18:56 +09:00
9036c72a61 find_if: Removed unnecessary mpl::lambda
mpl::apply can treat placeholder expression
2018-07-07 07:08:17 +09:00
06a2f0560f doc: Fixed keyword links 2018-07-07 01:56:50 +09:00
c76cd3d6b2 test: Suppress unused warning 2018-07-07 01:27:20 +09:00
77959b1d33 test: Added test for ticket 5490 2018-07-07 01:23:11 +09:00
c6448b9e45 transform: Stopped use of mpl::apply
it causes unintended MPL substitution
2018-07-07 01:06:05 +09:00
561890429b doc: Moved paragraph to mpl adaptation to mpl section 2018-07-06 11:21:54 +09:00
23c54602c2 Merge pull request #185 from boostorg/docfix/io-for-adapted
doc: Added note regarding IO for adapted type
2018-07-05 22:57:56 +09:00
30c044b03a doc: Added note regarding IO for adapted type
[skip ci]
closes: track 6091
2018-07-05 22:15:33 +09:00
a71b9607e1 Merge pull request #184 from boostorg/develop
pre boost 1.68.0 beta merge
2018-07-03 21:50:36 +09:00
102588ae46 Merge pull request #183 from boostorg/mutable_for_each
Fixed for_each parameter type to accept mutable functor
2018-07-03 12:40:54 +09:00
0e4c5127f5 algo/for_each: Fixed parameter type
to be able to call mutable object
2018-07-02 22:19:25 +09:00
afb8b150a9 Merge pull request #181 from boostorg/init-and-paren
Fixed misused parenthesized initializer
2018-05-13 20:40:25 +09:00
d832387fdb Fixed misused parenthesized initializer 2018-05-13 18:59:43 +09:00
0c138de7cb Merge pull request #180 from boostorg/develop
Merge develop
2018-05-10 00:59:45 +09:00
98b96c3b97 Merge pull request #179 from boostorg/support
Reorganize support facility to simplify
2018-04-28 00:21:06 +09:00
68be23a0b9 Merge upstream branch 'develop' into support 2018-04-27 20:32:09 +09:00
6f8de8d774 Added workaround for fold expr and dependent name 2018-04-27 20:29:06 +09:00
5221bbbc76 Added workaround for defaulted and noexcept 2018-04-27 14:56:23 +09:00
0e900bba3f Specify defaulted and remove unnecessary functions from unused_type 2018-04-27 12:37:37 +09:00
38aa3705d0 Added test for unused_type 2018-04-27 12:37:00 +09:00
1854626651 Merge pull request #178 from boostorg/more-ci-targets
More ci targets
2018-04-26 06:41:55 +09:00
e8da43a539 Added workaround for gcc 4.6 with C array 2018-04-26 00:02:57 +09:00
3b8fb67b52 Update WA condition 2018-04-22 03:44:57 +09:00
c4881f1862 Merge upstream branch 'develop' into more-ci-targets 2018-04-22 03:41:55 +09:00
e818089a91 likewise 2018-04-21 19:18:09 +09:00
a95a838779 Added workaround to test
is_constructible on GCC < 4.7 always fail to test non unary ctor
2018-04-21 18:22:24 +09:00
7443cb1101 Changed availability condition to what Boost.TT providing 2018-04-20 13:04:02 +09:00
84b1847442 Merge pull request #177 from boostorg/bugfix/c-style-array
Fixed compile error with C-style array
2018-04-19 01:44:13 +09:00
a273cd8131 Added workaround for msvc-14.x 2018-04-19 00:21:41 +09:00
757541f9d2 Updated c-style array test for associative container 2018-04-18 22:39:55 +09:00
dd695c1dbd Fixed a compile error bug similar to previous vector's one 2018-04-18 22:38:09 +09:00
96b2e51828 Added test for #176 2018-04-18 22:33:36 +09:00
e962c1abb5 Fixed vector compile error with C-style array 2018-04-18 22:31:35 +09:00
7899658d8e Merge pull request #175 from boostorg/develop
Post beta merge
2018-03-25 12:58:00 +09:00
79262831ef Merge pull request #174 from boostorg/testfix/logical-and
Fixed detail::and test
2018-03-15 13:35:23 +09:00
03ac9086bc Merge pull request #172 from boostorg/develop
Pre 1.67.0 beta merge - agian
2018-03-06 15:09:50 +09:00
9de3272174 Added workaround for GCC 4.4/c++0x
Teh call of ctor is ambiguous since gcc 4.4 allows binding rvalue to lvalue reference.
2018-03-06 00:40:41 +09:00
25c6334c58 meta: Update failure toolset name 2018-03-03 16:20:08 +09:00
479bc3133b Merge pull request #169 from boostorg/develop
Pre 1.67.0 beta merge
2018-02-26 01:02:16 +09:00
eeeee9bfbb Fixed ambiguous call of hash_value
ADL also picks stdext::hash_value which msvc providing.
2018-02-19 22:40:56 +09:00
eb0cbbc347 CI: trusty doesn't provide gcc 4.5 2018-02-18 21:25:51 +09:00
d0c17119e7 CI: skip known to fail 2018-02-17 17:46:03 +09:00
28ea5dacce CI: Added more build target 2018-02-17 17:45:49 +09:00
6c96720080 CI: Remove build branch restriction 2018-02-17 17:27:20 +09:00
71ad390cf0 Merge pull request #162 from boostorg/develop
Post beta merge
2017-12-03 00:08:31 +09:00
e6b5879511 Merge pull request #157 from boostorg/develop
Merge develop to master
2017-10-31 09:40:44 +09:00
84d8afbb31 Merge pull request #147 from boostorg/develop
Develop to Master
2017-06-19 23:43:44 +09:00
715a7fb729 Merge pull request #141 from boostorg/develop
Boost 1.63.0 beta release
2016-11-01 17:03:05 +09:00
3b96c3b70b Add, and update, documentation build targets. 2016-10-10 11:39:49 -05:00
904d3c2c01 Merge pull request #131 from boostorg/develop
post 1.61.0 beta1
2016-04-02 12:44:16 +08:00
0263c75cd8 Merge pull request #125 from boostorg/develop
Release Candidate for 1.61.0.
2016-03-03 06:58:37 +08:00
53ba3de15a Merge pull request #119 from boostorg/develop
Post 1.60.0 Beta bugfixes.
2015-12-11 15:06:59 +08:00
d6c853f7ad Merge pull request #111 from boostorg/develop
1.60.0 beta
2015-10-28 07:42:24 +08:00
dc55e5e103 Merge pull request #98 from Flast/bugfix/issue-11517
Fix #11517 (for master)
2015-08-04 08:14:48 +08:00
1646a7252b Merge pull request #95 from Flast/preprocess
Regenerate preprocessed files.
2015-07-28 08:03:50 +08:00
dae9964b15 Merge pull request #93 from Flast/bugfix/issue-11140
Fix a issue with nested fusion::tuple.
2015-07-27 15:26:37 +08:00
115 changed files with 875 additions and 529 deletions

View File

@ -11,11 +11,6 @@ os:
- linux
- osx
branches:
only:
- master
- develop
env:
matrix:
- BOGUS_JOB=true
@ -26,18 +21,48 @@ matrix:
- env: BOGUS_JOB=true
include:
# trusty default (gcc 4.8.4)
- os: linux
env: TOOLSET=gcc CXXSTD=03,11,1y
dist: xenial
env: TOOLSET=gcc-4.4 CXXSTD=98,0x
addons:
apt:
packages:
- g++-4.4
sources:
- ubuntu-toolchain-r-test
#- os: linux
# dist: xenial
# env: TOOLSET=gcc-4.5 CXXSTD=03,0x
# addons:
# apt:
# packages:
# - g++-4.5
# sources:
# - ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=gcc-4.6 CXXSTD=03,0x
addons:
apt:
packages:
- g++-4.6
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=gcc-4.7 CXXSTD=03,11
addons:
apt:
packages:
- g++-4.7
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=gcc-4.8 CXXSTD=03,11,1y
addons:
apt:
@ -47,7 +72,8 @@ matrix:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc-4.9 CXXSTD=03,11,1y
dist: xenial
env: TOOLSET=gcc-4.9 CXXSTD=03,11,14
addons:
apt:
packages:
@ -56,7 +82,8 @@ matrix:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc-5 CXXSTD=03,11,14,1z
dist: xenial
env: TOOLSET=gcc-5 CXXSTD=03,11,14,17
addons:
apt:
packages:
@ -65,7 +92,8 @@ matrix:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc-6 CXXSTD=03,11,14,1z
dist: xenial
env: TOOLSET=gcc-6 CXXSTD=03,11,14,17
addons:
apt:
packages:
@ -74,7 +102,8 @@ matrix:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc-7 CXXSTD=03,11,14,1z
dist: xenial
env: TOOLSET=gcc-7 CXXSTD=03,11,14,17
addons:
apt:
packages:
@ -82,76 +111,93 @@ matrix:
sources:
- ubuntu-toolchain-r-test
# trusty default (clang 3.9.0)
- os: linux
env: TOOLSET=clang CXXSTD=03,11,14,1z
dist: xenial
env: TOOLSET=gcc-8 CXXSTD=03,11,14,17,2a
addons:
apt:
packages:
- libstdc++-4.9-dev
- g++-8
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=clang-3.5 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.5
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=clang-3.6 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.6
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.6
- os: linux
dist: xenial
env: TOOLSET=clang-3.7 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.7
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.7
- os: linux
dist: xenial
env: TOOLSET=clang-3.8 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.8
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=clang-3.9 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.9
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=clang-4.0 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-4.0
- libstdc++-4.9-dev
- os: linux
dist: xenial
env: TOOLSET=clang-5.0 CXXSTD=03,11,14,17,2a
addons:
apt:
packages:
- clang-5.0
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-4.0
- llvm-toolchain-xenial-5.0
- os: linux
dist: xenial
env: TOOLSET=clang-6.0 CXXSTD=03,11,14,17,2a
addons:
apt:
packages:
- clang-6.0
sources:
- llvm-toolchain-xenial-6.0
- os: linux
dist: xenial
env: TOOLSET=clang-7.0 CXXSTD=03,11,14,17,2a
addons:
apt:
packages:
- clang-7
sources:
- llvm-toolchain-xenial-7
- os: osx
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z
@ -191,7 +237,7 @@ install:
- git submodule init libs/typeof
- git submodule init libs/utility
- git submodule init tools/build
- git submodule init libs/headers tools/boost_install tools/build
- git submodule update
- rm -rf libs/fusion

29
CMakeLists.txt Normal file
View File

@ -0,0 +1,29 @@
# Copyright 2018 Mike Dev
# Distributed under the Boost Software License, Version 1.0.
# See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
#
# Partial (add_subdirectory only) and experimental CMake support
# Subject to change; please do not rely on the contents of this file yet
cmake_minimum_required(VERSION 3.5)
project(BoostFusion LANGUAGES CXX)
add_library(boost_fusion INTERFACE)
add_library(Boost::fusion ALIAS boost_fusion)
target_include_directories(boost_fusion INTERFACE include)
target_link_libraries(boost_fusion
INTERFACE
Boost::config
Boost::container_hash
Boost::core
Boost::function_types
Boost::mpl
Boost::preprocessor
Boost::static_assert
Boost::tuple
Boost::type_traits
Boost::typeof
Boost::utility
)

View File

@ -7,25 +7,41 @@ version: 1.0.{build}-{branch}
shallow_clone: true
branches:
only:
- master
- develop
environment:
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-9.0
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-10.0
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-11.0
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
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
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
TOOLSET: clang-win
CXXSTD: 14
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
TOOLSET: clang-win
CXXSTD: 17
install:
- set BOOST_BRANCH=develop
@ -63,7 +79,7 @@ install:
- git submodule init libs/typeof
- git submodule init libs/utility
- git submodule init tools/build
- git submodule init libs/headers tools/boost_install tools/build
- git submodule update
- xcopy /s /e /q %APPVEYOR_BUILD_FOLDER% libs\fusion
- cmd /c bootstrap
@ -72,4 +88,4 @@ install:
build: off
test_script:
- b2 -j%NUMBER_OF_PROCESSORS% --hash libs/fusion/test toolset=%TOOLSET%
- b2 -j%NUMBER_OF_PROCESSORS% --hash libs/fusion/test toolset=%TOOLSET% cxxstd=%CXXSTD%

View File

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

View File

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

View File

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

View File

@ -16,10 +16,6 @@
#include <boost/preprocessor/empty.hpp>
#include <boost/preprocessor/control/if.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/adapt_base.hpp>

View File

@ -15,9 +15,6 @@
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/empty.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/adapt_base.hpp>

View File

@ -21,8 +21,8 @@
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/mpl/if.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_reference.hpp>
#include <boost/typeof/typeof.hpp>
@ -83,20 +83,8 @@
typedef \
BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \
typename) \
boost::remove_const< \
BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \
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;
deduced_attr_type::type type; \
typedef type const_type;
#define BOOST_FUSION_ADT_ATTRIBUTE_GIVENTYPE( \
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \

View File

@ -144,9 +144,8 @@ namespace boost { namespace fusion
: is_same<typename I1::identity, typename I2::identity>
{};
private:
// silence MSVC warning C4512: assignment operator could not be generated
boost_tuple_iterator& operator= (boost_tuple_iterator const&);
BOOST_DELETED_FUNCTION(boost_tuple_iterator& operator= (boost_tuple_iterator const&))
};
template <typename Null>

View File

@ -15,10 +15,6 @@
#include <boost/preprocessor/empty.hpp>
#include <boost/preprocessor/control/iif.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/adapt_base.hpp>

View File

@ -18,10 +18,6 @@
#include <boost/preprocessor/comparison/less.hpp>
#include <boost/preprocessor/seq/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/adapt_base.hpp>

View File

@ -34,7 +34,9 @@
#include <boost/mpl/tag.hpp>
#include <boost/mpl/eval_if.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_reference.hpp>
#include <boost/typeof/typeof.hpp>

View File

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

View File

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

View File

@ -1,6 +1,7 @@
/*=============================================================================
Copyright (c) 2001-2007 Joel de Guzman
Copyright (c) 2007 Dan Marsden
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -13,7 +14,7 @@
#include <boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp>
#include <boost/fusion/support/is_segmented.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/core/enable_if.hpp>
namespace boost { namespace fusion
{
@ -28,24 +29,16 @@ namespace boost { namespace fusion
template <typename Sequence, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
enable_if<
traits::is_sequence<Sequence>
, void
>::type
for_each(Sequence& seq, F const& f)
inline typename enable_if<traits::is_sequence<Sequence> >::type
for_each(Sequence& seq, F f)
{
detail::for_each(seq, f, typename traits::is_segmented<Sequence>::type());
}
template <typename Sequence, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
enable_if<
traits::is_sequence<Sequence>
, void
>::type
for_each(Sequence const& seq, F const& f)
inline typename enable_if<traits::is_sequence<Sequence> >::type
for_each(Sequence const& seq, F f)
{
detail::for_each(seq, f, typename traits::is_segmented<Sequence>::type());
}

View File

@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2011 Eric Niebler
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -9,7 +10,7 @@
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/core/enable_if.hpp>
namespace boost { namespace fusion
{
@ -21,21 +22,13 @@ namespace boost { namespace fusion
template <typename Sequence, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
enable_if<
traits::is_sequence<Sequence>
, void
>::type
for_each(Sequence& seq, F const& f);
inline typename enable_if<traits::is_sequence<Sequence> >::type
for_each(Sequence& seq, F f);
template <typename Sequence, typename F>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
enable_if<
traits::is_sequence<Sequence>
, void
>::type
for_each(Sequence const& seq, F const& f);
inline typename enable_if<traits::is_sequence<Sequence> >::type
for_each(Sequence const& seq, F f);
}}
#endif

View File

@ -2,6 +2,7 @@
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2007 Dan Marsden
Copyright (c) 2009 Christopher Schmidt
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,6 @@
#include <boost/mpl/apply.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/mpl/lambda.hpp>
#include <boost/mpl/or.hpp>
#include <boost/fusion/iterator/advance.hpp>
#include <boost/fusion/iterator/distance.hpp>
@ -22,10 +22,9 @@
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/core/enable_if.hpp>
namespace boost { namespace fusion {
struct random_access_traversal_tag;
namespace detail
namespace boost { namespace fusion { namespace detail
{
template <typename Iterator, typename Pred>
struct apply_filter
@ -178,8 +177,8 @@ namespace detail
choose_find_if<
First
, Last
, typename mpl::lambda<Pred>::type
, is_base_of<random_access_traversal_tag, typename traits::category_of<First>::type>::value
, Pred
, traits::is_random_access<First>::value
>::type
type;
@ -208,31 +207,23 @@ namespace detail
return recursive_call(iter, found());
}
template <typename Iterator, typename Tag>
template <typename Iterator>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
choose_call(Iterator const& iter, Tag)
static typename boost::disable_if<traits::is_random_access<Iterator>, type>::type
iter_call(Iterator const& iter)
{
return recursive_call(iter);
}
template <typename Iterator>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
choose_call(Iterator const& iter, random_access_traversal_tag)
static typename boost::enable_if<traits::is_random_access<Iterator>, type>::type
iter_call(Iterator const& iter)
{
typedef typename result_of::distance<Iterator, type>::type N;
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>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type

View File

@ -1,7 +1,8 @@
/*=============================================================================
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)
==============================================================================*/
#if !defined(FUSION_REMOVE_IF_07162005_0818)
@ -10,7 +11,6 @@
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/view/filter_view/filter_view.hpp>
#include <boost/mpl/not.hpp>
#include <boost/type_traits/is_same.hpp>
namespace boost { namespace fusion
{

View File

@ -111,9 +111,8 @@ namespace boost { namespace fusion {
Seq& seq_;
private:
// silence MSVC warning C4512: assignment operator could not be generated
deque_iterator& operator= (deque_iterator const&);
BOOST_DELETED_FUNCTION(deque_iterator& operator= (deque_iterator const&))
};
}}

View File

@ -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))
{}

View File

@ -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) {}

View File

@ -42,9 +42,8 @@ namespace boost { namespace fusion
cons_type& cons;
private:
// silence MSVC warning C4512: assignment operator could not be generated
cons_iterator& operator= (cons_iterator const&);
BOOST_DELETED_FUNCTION(cons_iterator& operator= (cons_iterator const&))
};
struct nil_iterator : iterator_base<nil_iterator>

View File

@ -125,11 +125,7 @@ namespace boost { namespace fusion { namespace detail
}
BOOST_FUSION_GPU_ENABLED
value_type get_val(mpl::identity<key_type>);
BOOST_FUSION_GPU_ENABLED
pair_type get_val(mpl::int_<index>);
BOOST_FUSION_GPU_ENABLED
value_type get_val(mpl::identity<key_type>) const;
mpl::identity<value_type> get_val(mpl::identity<key_type>) const;
BOOST_FUSION_GPU_ENABLED
pair_type get_val(mpl::int_<index>) const;

View File

@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2001-2013 Joel de Guzman
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -8,10 +9,6 @@
#define BOOST_FUSION_MAP_DETAIL_VALUE_AT_KEY_IMPL_02042013_0821
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/mpl/at.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/utility/declval.hpp>
namespace boost { namespace fusion
@ -27,12 +24,10 @@ namespace boost { namespace fusion
struct value_at_key_impl<map_tag>
{
template <typename Sequence, typename Key>
struct apply
{
typedef
decltype(boost::declval<Sequence>().get_val(mpl::identity<Key>()))
type;
};
struct apply : BOOST_FUSION_DECLTYPE_N3031((
boost::declval<Sequence>().get_val(mpl::identity<Key>())
))
{};
};
}
}}

View File

@ -36,8 +36,6 @@
# include <boost/fusion/container/map/detail/cpp03/map_fwd.hpp>
#else
#include <boost/fusion/container/map/detail/map_impl.hpp>
///////////////////////////////////////////////////////////////////////////////
// C++11 interface
///////////////////////////////////////////////////////////////////////////////

View File

@ -156,9 +156,8 @@ namespace boost { namespace fusion
Seq& seq_;
private:
// silence MSVC warning C4512: assignment operator could not be generated
map_iterator& operator= (map_iterator const&);
BOOST_DELETED_FUNCTION(map_iterator& operator= (map_iterator const&))
};
}}

View File

@ -1,5 +1,5 @@
/*=============================================================================
Copyright (c) 2014 Kohei Takahashi
Copyright (c) 2014,2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -7,7 +7,6 @@
#ifndef FUSION_VALUE_AT_IMPL_16122014_1641
#define FUSION_VALUE_AT_IMPL_16122014_1641
#include <boost/config.hpp>
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/detail/config.hpp>
@ -23,6 +22,7 @@
///////////////////////////////////////////////////////////////////////////////
#include <boost/fusion/container/vector/vector_fwd.hpp>
#include <boost/type_traits/declval.hpp>
#include <boost/mpl/identity.hpp>
namespace boost { namespace fusion
{
@ -35,7 +35,7 @@ namespace boost { namespace fusion
template <std::size_t N, typename U>
static inline BOOST_FUSION_GPU_ENABLED
U value_at_impl(store<N, U> const volatile*);
mpl::identity<U> value_at_impl(store<N, U> const volatile*);
}
namespace extension
@ -47,12 +47,10 @@ namespace boost { namespace fusion
struct value_at_impl<vector_tag>
{
template <typename Sequence, typename N>
struct apply
{
typedef
decltype(vector_detail::value_at_impl<N::value>(boost::declval<Sequence*>()))
type;
};
struct apply : BOOST_FUSION_DECLTYPE_N3031((
vector_detail::value_at_impl<N::value>(boost::declval<Sequence*>())
))
{};
};
}
}}

View File

@ -168,9 +168,15 @@ namespace boost { namespace fusion
: elem(std::forward<U>(rhs))
{}
using elem_type = T;
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>
struct vector_data;
@ -231,32 +237,23 @@ namespace boost { namespace fusion
assign(std::forward<Sequence>(seq), detail::index_sequence<M...>());
}
template <std::size_t N, typename U>
static BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
U& at_detail(store<N, U>* this_)
{
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;
}
private:
template <std::size_t J>
using store_at = decltype(store_at_impl<J>(static_cast<vector_data*>(nullptr)));
public:
template <typename J>
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>
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

View File

@ -43,9 +43,8 @@ namespace boost { namespace fusion
Vector& vec;
private:
// silence MSVC warning C4512: assignment operator could not be generated
vector_iterator& operator= (vector_iterator const&);
BOOST_DELETED_FUNCTION(vector_iterator& operator= (vector_iterator const&))
};
}}

View File

@ -20,13 +20,13 @@ namespace boost { namespace fusion { namespace traits
{
template <typename Seq1, typename Seq2, typename Enable = void>
struct enable_equality
: mpl::or_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >
: mpl::and_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >
{};
template <typename Seq1, typename Seq2, typename Enable = void>
struct enable_comparison
: mpl::and_<
mpl::or_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >
traits::is_sequence<Seq1>, traits::is_sequence<Seq2>
, mpl::equal_to<result_of::size<Seq1>, result_of::size<Seq2> >
>
{};

View File

@ -118,7 +118,7 @@ namespace boost { namespace fusion
>::type
at_c(Sequence& seq)
{
return fusion::at<mpl::int_<N> >(seq);
return result_of::at_c<Sequence, N>::call(seq);
}
template <int N, typename Sequence>
@ -126,7 +126,7 @@ namespace boost { namespace fusion
inline typename result_of::at_c<Sequence const, N>::type
at_c(Sequence const& seq)
{
return fusion::at<mpl::int_<N> >(seq);
return result_of::at_c<Sequence const, N>::call(seq);
}
}}

View File

@ -144,9 +144,8 @@ namespace boost { namespace fusion
Stream& stream;
private:
// silence MSVC warning C4512: assignment operator could not be generated
string_ios_manip& operator= (string_ios_manip const&);
BOOST_DELETED_FUNCTION(string_ios_manip& operator= (string_ios_manip const&))
};
} // detail

View File

@ -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,35 @@ namespace std
#define BOOST_FUSION_CONSTEXPR_THIS BOOST_CONSTEXPR
#endif
// Workaround for compilers not implementing N3031 (DR743 and DR950).
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) || \
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>
# define BOOST_FUSION_DECLTYPE_N3031(parenthesized_expr) \
boost::mpl::identity<decltype parenthesized_expr>::type
# endif
#else
# define BOOST_FUSION_DECLTYPE_N3031(parenthesized_expr) \
decltype parenthesized_expr
#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

View File

@ -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,7 +17,8 @@
#endif
namespace boost { namespace fusion { namespace detail {
#if defined(BOOST_NO_CXX17_FOLD_EXPRESSIONS)
#if defined(BOOST_NO_CXX17_FOLD_EXPRESSIONS) \
|| BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913))
template<typename ...Cond>
struct and_impl : false_type {};

View File

@ -9,20 +9,19 @@
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
#include <boost/core/enable_if.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/mpl/equal_to.hpp>
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_ {};
template <typename Sequence1, typename Sequence2>
struct is_same_size<Sequence1, Sequence2,
typename enable_if<traits::is_sequence<Sequence1> >::type,
typename enable_if<traits::is_sequence<Sequence2> >::type>
: mpl::equal_to<result_of::size<Sequence1>, result_of::size<Sequence2> >
struct is_same_size<Sequence1, Sequence2, true>
: mpl::bool_<result_of::size<Sequence1>::value ==
result_of::size<Sequence2>::value>
{};
}}}

View File

@ -14,6 +14,7 @@
namespace boost { namespace fusion
{
// Special tags:
struct non_fusion_tag;
struct sequence_facade_tag;
struct boost_tuple_tag; // boost::tuples::tuple 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 <>
struct is_view_impl<sequence_facade_tag>
{

View File

@ -8,16 +8,15 @@
#if !defined(FUSION_PAIR_07222005_1203)
#define FUSION_PAIR_07222005_1203
#include <iosfwd>
#include <utility>
#include <boost/fusion/support/config.hpp>
#include <iosfwd>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
#include <boost/fusion/support/detail/enabler.hpp>
#include <boost/core/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/config.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_convertible.hpp>
#include <boost/type_traits/remove_cv_ref.hpp>
#include <boost/type_traits/is_lvalue_reference.hpp>
#if defined (BOOST_MSVC)
# pragma warning(push)
@ -34,46 +33,54 @@ namespace boost { namespace fusion
pair()
: second() {}
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
pair(pair const& rhs)
: second(rhs.second) {}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
pair(pair&& rhs)
: second(BOOST_FUSION_FWD_ELEM(Second, rhs.second)) {}
#endif
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
pair(typename detail::call_param<Second>::type val)
: second(val) {}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename Second2>
BOOST_FUSION_GPU_ENABLED
pair(typename remove_cv_ref<Second>::type&& val)
: second(BOOST_FUSION_FWD_ELEM(Second, val)) {}
pair(Second2&& val
, typename boost::disable_if<is_lvalue_reference<Second2> >::type* /* dummy */ = 0
, typename boost::enable_if<is_convertible<Second2, Second> >::type* /*dummy*/ = 0
) : second(BOOST_FUSION_FWD_ELEM(Second, val)) {}
#endif
template <typename Second2>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
pair(pair<First, Second2> const& rhs,
typename disable_if<is_same<Second, Second2>, detail::enabler_>::type = detail::enabler,
typename enable_if<is_convertible<Second2, Second>, detail::enabler_>::type = detail::enabler)
pair(pair<First, Second2> const& rhs)
: second(rhs.second) {}
template <typename Second2>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
typename disable_if<is_same<Second, Second2>, pair&>::type
operator=(pair<First, Second2> const& rhs)
pair& operator=(pair<First, Second2> const& rhs)
{
second = rhs.second;
return *this;
}
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
pair& operator=(pair const& rhs)
{
second = rhs.second;
return *this;
}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename Second2>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
pair(pair<First, Second2>&& rhs,
typename disable_if<is_same<Second, Second2>, detail::enabler_>::type = detail::enabler,
typename enable_if<is_convertible<Second2, Second>, detail::enabler_>::type = detail::enabler)
: second(std::move(rhs.second)) {}
template <typename Second2>
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
typename disable_if<is_same<Second, Second2>, pair&>::type
operator=(pair<First, Second2>&& rhs)
pair& operator=(pair&& rhs)
{
second = std::move(rhs.second);
second = BOOST_FUSION_FWD_ELEM(Second, rhs.second);
return *this;
}
#endif

View File

@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -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();

View File

@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -8,14 +9,10 @@
#define FUSION_NEXT_IMPL_06052005_0900
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/mpl/eval_if.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
{
@ -48,26 +45,13 @@ namespace boost { namespace fusion
>::type
next_type;
typedef typename
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;
typedef filter_iterator<category, next_type, last_type, pred_type> type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
return type(filter::iter_call(i.first));
return type(fusion::next(i.first));
}
};
};

View File

@ -57,9 +57,8 @@ namespace boost { namespace fusion
last_type last() const { return fusion::end(seq); }
typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
private:
// silence MSVC warning C4512: assignment operator could not be generated
filter_view& operator= (filter_view const&);
BOOST_DELETED_FUNCTION(filter_view& operator= (filter_view const&))
};
}}

View File

@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -9,7 +10,6 @@
#include <boost/fusion/support/config.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/support/iterator_base.hpp>
#include <boost/fusion/algorithm/query/detail/find_if.hpp>
@ -61,9 +61,8 @@ namespace boost { namespace fusion
first_type first;
private:
// silence MSVC warning C4512: assignment operator could not be generated
filter_iterator& operator= (filter_iterator const&);
BOOST_DELETED_FUNCTION(filter_iterator& operator= (filter_iterator const&))
};
}}

View File

@ -69,10 +69,10 @@ namespace boost { namespace fusion
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
concat_last_type concat_last() const { return fusion::end(seq2); }
private:
// silence MSVC warning C4512: assignment operator could not be generated
joint_view& operator= (joint_view const&);
BOOST_DELETED_FUNCTION(joint_view& operator= (joint_view const&))
private:
typename mpl::if_<traits::is_view<Sequence1>, Sequence1, Sequence1&>::type seq1;
typename mpl::if_<traits::is_view<Sequence2>, Sequence2, Sequence2&>::type seq2;
};

View File

@ -50,9 +50,8 @@ namespace boost { namespace fusion
first_type first;
concat_type concat;
private:
// silence MSVC warning C4512: assignment operator could not be generated
joint_view_iterator& operator= (joint_view_iterator const&);
BOOST_DELETED_FUNCTION(joint_view_iterator& operator= (joint_view_iterator const&))
};
}}

View File

@ -47,9 +47,8 @@ namespace boost { namespace fusion
Sequence& seq;
private:
// silence MSVC warning C4512: assignment operator could not be generated
nview_iterator& operator= (nview_iterator const&);
BOOST_DELETED_FUNCTION(nview_iterator& operator= (nview_iterator const&))
};
}}

View File

@ -44,9 +44,8 @@ namespace boost { namespace fusion
stored_seq_type seq;
private:
// silence MSVC warning C4512: assignment operator could not be generated
repetitive_view& operator= (repetitive_view const&);
BOOST_DELETED_FUNCTION(repetitive_view& operator= (repetitive_view const&))
};
}}

View File

@ -47,9 +47,8 @@ namespace boost { namespace fusion
Sequence& seq;
pos_type pos;
private:
// silence MSVC warning C4512: assignment operator could not be generated
repetitive_view_iterator& operator= (repetitive_view_iterator const&);
BOOST_DELETED_FUNCTION(repetitive_view_iterator& operator= (repetitive_view_iterator const&))
};
}}

View File

@ -61,9 +61,8 @@ namespace boost { namespace fusion
last_type last() const { return fusion::end(seq); }
typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
private:
// silence MSVC warning C4512: assignment operator could not be generated
reverse_view& operator= (reverse_view const&);
BOOST_DELETED_FUNCTION(reverse_view& operator= (reverse_view const&))
};
}}

View File

@ -48,9 +48,8 @@ namespace boost { namespace fusion
first_type first;
private:
// silence MSVC warning C4512: assignment operator could not be generated
reverse_view_iterator& operator= (reverse_view_iterator const&);
BOOST_DELETED_FUNCTION(reverse_view_iterator& operator= (reverse_view_iterator const&))
};
}}

View File

@ -1,38 +0,0 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2007 Dan Marsden
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_APPLY_TRANSFORM_RESULT_02092006_1936)
#define BOOST_FUSION_APPLY_TRANSFORM_RESULT_02092006_1936
#include <boost/fusion/support/config.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion
{
struct void_;
namespace detail
{
template <typename F>
struct apply_transform_result
{
template <typename T0, typename T1 = void_>
struct apply
: boost::result_of<F(T0, T1)>
{};
template <typename T0>
struct apply<T0, void_>
: boost::result_of<F(T0)>
{};
};
}
}}
#endif

View File

@ -1,6 +1,7 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 Dan Marsden
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -9,9 +10,8 @@
#define BOOST_FUSION_AT_IMPL_20061029_1946
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion {
struct transform_view_tag;
@ -29,9 +29,8 @@ namespace boost { namespace fusion {
struct apply
{
typedef typename Seq::transform_type F;
typedef detail::apply_transform_result<F> transform_type;
typedef typename boost::fusion::result_of::at<typename Seq::sequence_type, N>::type value_type;
typedef typename mpl::apply<transform_type, value_type>::type type;
typedef typename result_of::at<typename Seq::sequence_type, N>::type value_type;
typedef typename boost::result_of<F(value_type)>::type type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type call(Seq& seq)
@ -48,10 +47,9 @@ namespace boost { namespace fusion {
struct apply
{
typedef typename Seq::transform_type F;
typedef detail::apply_transform_result<F> transform_type;
typedef typename boost::fusion::result_of::at<typename Seq::sequence1_type, N>::type value1_type;
typedef typename boost::fusion::result_of::at<typename Seq::sequence2_type, N>::type value2_type;
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
typedef typename result_of::at<typename Seq::sequence1_type, N>::type value1_type;
typedef typename result_of::at<typename Seq::sequence2_type, N>::type value2_type;
typedef typename boost::result_of<F(value1_type, value2_type)>::type type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type call(Seq& seq)

View File

@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -8,10 +9,8 @@
#define FUSION_DEREF_IMPL_07162005_1026
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion
{
@ -34,8 +33,8 @@ namespace boost { namespace fusion
result_of::deref<typename Iterator::first_type>::type
value_type;
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
typedef typename mpl::apply<transform_type, value_type>::type type;
typedef typename Iterator::transform_type F;
typedef typename boost::result_of<F(value_type)>::type type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
@ -60,8 +59,8 @@ namespace boost { namespace fusion
result_of::deref<typename Iterator::first2_type>::type
value2_type;
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
typedef typename Iterator::transform_type F;
typedef typename boost::result_of<F(value1_type, value2_type)>::type type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
@ -70,7 +69,7 @@ namespace boost { namespace fusion
return i.f(*i.first1, *i.first2);
}
};
};
};
}
}}

View File

@ -1,6 +1,7 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 Dan Marsden
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -9,9 +10,8 @@
#define BOOST_FUSION_VALUE_AT_IMPL_20061101_0745
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
#include <boost/fusion/sequence/intrinsic/value_at.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion {
struct transform_view_tag;
@ -29,9 +29,8 @@ namespace boost { namespace fusion {
struct apply
{
typedef typename Seq::transform_type F;
typedef detail::apply_transform_result<F> transform_type;
typedef typename boost::fusion::result_of::value_at<typename Seq::sequence_type, N>::type value_type;
typedef typename mpl::apply<transform_type, value_type>::type type;
typedef typename result_of::value_at<typename Seq::sequence_type, N>::type value_type;
typedef typename boost::result_of<F(value_type)>::type type;
};
};
@ -42,10 +41,9 @@ namespace boost { namespace fusion {
struct apply
{
typedef typename Seq::transform_type F;
typedef detail::apply_transform_result<F> transform_type;
typedef typename boost::fusion::result_of::value_at<typename Seq::sequence1_type, N>::type value1_type;
typedef typename boost::fusion::result_of::value_at<typename Seq::sequence2_type, N>::type value2_type;
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
typedef typename result_of::value_at<typename Seq::sequence1_type, N>::type value1_type;
typedef typename result_of::value_at<typename Seq::sequence2_type, N>::type value2_type;
typedef typename boost::result_of<F(value1_type, value2_type)>::type type;
};
};
}

View File

@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -8,9 +9,8 @@
#define FUSION_VALUE_OF_IMPL_07162005_1030
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion
{
@ -33,8 +33,8 @@ namespace boost { namespace fusion
result_of::value_of<typename Iterator::first_type>::type
value_type;
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
typedef typename mpl::apply<transform_type, value_type>::type type;
typedef typename Iterator::transform_type F;
typedef typename boost::result_of<F(value_type)>::type type;
};
};
@ -52,8 +52,8 @@ namespace boost { namespace fusion
result_of::value_of<typename Iterator::first2_type>::type
value2_type;
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
typedef typename Iterator::transform_type F;
typedef typename boost::result_of<F(value1_type, value2_type)>::type type;
};
};
}

View File

@ -76,9 +76,8 @@ namespace boost { namespace fusion
typename mpl::if_<traits::is_view<Sequence1>, Sequence1, Sequence1&>::type seq1;
typename mpl::if_<traits::is_view<Sequence2>, Sequence2, Sequence2&>::type seq2;
private:
// silence MSVC warning C4512: assignment operator could not be generated
transform_view& operator= (transform_view const&);
BOOST_DELETED_FUNCTION(transform_view& operator= (transform_view const&))
};
// Unary Version
@ -113,9 +112,8 @@ namespace boost { namespace fusion
typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
transform_type f;
private:
// silence MSVC warning C4512: assignment operator could not be generated
transform_view& operator= (transform_view const&);
BOOST_DELETED_FUNCTION(transform_view& operator= (transform_view const&))
};
}}

View File

@ -42,9 +42,8 @@ namespace boost { namespace fusion
first_type first;
transform_type f;
private:
// silence MSVC warning C4512: assignment operator could not be generated
transform_view_iterator& operator= (transform_view_iterator const&);
BOOST_DELETED_FUNCTION(transform_view_iterator& operator= (transform_view_iterator const&))
};
// Binary Version
@ -70,9 +69,8 @@ namespace boost { namespace fusion
first2_type first2;
transform_type f;
private:
// silence MSVC warning C4512: assignment operator could not be generated
transform_view_iterator2& operator= (transform_view_iterator2 const&);
BOOST_DELETED_FUNCTION(transform_view_iterator2& operator= (transform_view_iterator2 const&))
};
}}

View File

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

View File

@ -66,6 +66,7 @@ project
[ run algorithm/zip2.cpp ]
[ run algorithm/zip_ignore.cpp ]
[ run algorithm/flatten.cpp ]
[ compile algorithm/ticket-5490.cpp ]
[ run sequence/as_deque.cpp ]
[ run sequence/as_list.cpp ]
@ -237,6 +238,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 ]
@ -255,7 +257,7 @@ project
[ run sequence/swap.cpp ]
[ compile support/is_sequence.cpp ]
[ compile support/pair_conversion.cpp ]
[ compile support/is_view.cpp ]
[ compile support/pair_deque.cpp ]
[ compile support/pair_list.cpp ]
[ compile support/pair_map.cpp ]
@ -267,8 +269,7 @@ project
[ compile support/and.cpp
: [ requires cxx11_variadic_templates ] ]
[ compile support/tag_of.cpp ]
[ compile support/pair_trivially_copyable.cpp
: [ requires cxx11_hdr_type_traits ] ]
[ compile support/unused.cpp ]
# [ compile-fail xxx.cpp ]

View File

@ -1,13 +1,15 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#include <boost/detail/lightweight_test.hpp>
#include <boost/core/lightweight_test.hpp>
#include <boost/fusion/container/vector/vector.hpp>
#include <boost/fusion/adapted/mpl.hpp>
#include <boost/fusion/sequence/io/out.hpp>
#include <boost/fusion/sequence/comparison/equal_to.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/mpl/vector_c.hpp>
@ -29,6 +31,15 @@ struct increment
}
};
struct mutable_increment : increment
{
template <typename T>
void operator()(T& v)
{
return increment::operator()(v);
}
};
int
main()
{
@ -44,9 +55,20 @@ main()
}
{
char const ruby[] = "Ruby";
typedef vector<int, char, double, char const*> vector_type;
vector_type v(1, 'x', 3.3, "Ruby");
vector_type v(1, 'x', 3.3, ruby);
for_each(v, increment());
BOOST_TEST_EQ(v, vector_type(2, 'y', 4.3, ruby + 1));
std::cout << v << std::endl;
}
{
char const ruby[] = "Ruby";
typedef vector<int, char, double, char const*> vector_type;
vector_type v(1, 'x', 3.3, ruby);
for_each(v, mutable_increment());
BOOST_TEST_EQ(v, vector_type(2, 'y', 4.3, ruby + 1));
std::cout << v << std::endl;
}

View File

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

View File

@ -0,0 +1,41 @@
/*=============================================================================
Copyright (c) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/include/transform.hpp>
#include <boost/mpl/quote.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/core/ignore_unused.hpp>
using namespace boost::fusion;
template <typename>
struct predicate {};
struct unique {};
template <typename>
struct meta_func
{
typedef unique result_type;
template <typename T>
unique operator()(const T&) const;
};
int main()
{
vector<int> v;
typedef predicate<boost::mpl::_1> lambda_t;
typedef boost::mpl::quote1<predicate> quote_t;
vector<unique> l = transform(v, meta_func<lambda_t>());
vector<unique> q = transform(v, meta_func<quote_t>());
boost::ignore_unused(l, q);
}

View File

@ -388,7 +388,8 @@ void test_sequence_n(Sequence & seq, mpl::int_<0>)
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ref_ctx,seq)) = that.data));
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ptr_ctx,seq)) = that.data));
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_spt_ctx,seq)) = that.data));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_obj_c_ctx,seq)));
// disabling this test, since it tries to return local address which is undefined behavior
//~ BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_obj_c_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_ref_c_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_ptr_c_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_spt_c_ctx,seq)));
@ -398,7 +399,8 @@ void test_sequence_n(Sequence & seq, mpl::int_<0>)
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ref_d_ctx,seq)) = that.data));
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ptr_d_ctx,seq)) = that.data));
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_spt_d_ctx,seq)) = that.data));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_obj_c_d_ctx,seq)));
// disabling this test, since it tries to return local address which is undefined behavior
//~ BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_obj_c_d_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_ref_c_d_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_ptr_c_d_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_spt_c_d_ctx,seq)));

View File

@ -165,6 +165,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
ns::point p(123, 456, 789);
std::cout << at_c<0>(p) << std::endl;
@ -237,6 +238,7 @@ main()
#if !BOOST_WORKAROUND(__GNUC__,<4)
{
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);
std::cout << at_c<0>(p) << std::endl;
@ -300,7 +302,7 @@ main()
BOOST_MPL_ASSERT((
boost::is_same<
boost::fusion::result_of::back<ns::point const>::type::type,
const int
int
>));
}

View File

@ -42,6 +42,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_adt>));
BOOST_STATIC_ASSERT(!traits::is_view<empty_adt>::value);
empty_adt e;
std::cout << e << std::endl;

View File

@ -93,6 +93,7 @@ main()
{
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
BOOST_STATIC_ASSERT(traits::is_view<adapted::point>::value);
ns::point basep(123, 456, 789);
adapted::point p(basep);

View File

@ -43,6 +43,7 @@ main()
empty_adt empty;
{
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_adt>));
BOOST_STATIC_ASSERT(traits::is_view<adapted::empty_adt>::value);
adapted::empty_adt e(empty);
std::cout << e << std::endl;

View File

@ -84,6 +84,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
ns::point p(123, 456, 789);
std::cout << at_c<0>(p) << std::endl;

View File

@ -42,6 +42,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_adt>));
BOOST_STATIC_ASSERT(!traits::is_view<empty_adt>::value);
empty_adt e;
std::cout << e << std::endl;

View File

@ -80,6 +80,7 @@ main()
{
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
BOOST_STATIC_ASSERT(traits::is_view<adapted::point>::value);
ns::point basep(123, 456);
adapted::point p(basep);

View File

@ -43,6 +43,7 @@ main()
empty_adt empty;
{
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_adt>));
BOOST_STATIC_ASSERT(traits::is_view<adapted::empty_adt>::value);
adapted::empty_adt e(empty);
std::cout << e << std::endl;

View File

@ -72,7 +72,7 @@ namespace ns
#endif
struct empty_struct {};
BOOST_FUSION_ADAPT_ASSOC_STRUCT(empty_struct,);
BOOST_FUSION_ADAPT_ASSOC_STRUCT(empty_struct,)
int
main()
@ -86,6 +86,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
ns::point p = {123, 456, 789};
std::cout << at_c<0>(p) << std::endl;

View File

@ -42,6 +42,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
empty_struct e;
std::cout << e << std::endl;

View File

@ -53,7 +53,7 @@ namespace ns
#endif
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
main()
@ -66,6 +66,7 @@ main()
{
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
BOOST_STATIC_ASSERT(traits::is_view<adapted::point>::value);
ns::point basep = {123, 456};
adapted::point p(basep);

View File

@ -43,6 +43,7 @@ main()
empty_struct empty;
{
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_struct>));
BOOST_STATIC_ASSERT(traits::is_view<adapted::empty_struct>::value);
adapted::empty_struct e(empty);
std::cout << e << std::endl;

View File

@ -98,6 +98,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
point p(123, 456, 789);
std::cout << at_c<0>(p) << std::endl;

View File

@ -96,6 +96,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
point p = {123, 456, 789.43f};
std::cout << at_c<0>(p) << std::endl;

View File

@ -170,6 +170,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
point p = {123, 456, 789};
std::cout << at_c<0>(p) << std::endl;

View File

@ -42,6 +42,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
empty_struct e;
std::cout << e << std::endl;

View File

@ -87,6 +87,7 @@ main()
{
BOOST_MPL_ASSERT((traits::is_view<adapted::point>));
BOOST_STATIC_ASSERT(traits::is_view<adapted::point>::value);
ns::point basep = {123, 456, 789};
adapted::point p(basep);

View File

@ -43,6 +43,7 @@ main()
empty_struct empty;
{
BOOST_MPL_ASSERT((traits::is_view<adapted::empty_struct>));
BOOST_STATIC_ASSERT(traits::is_view<adapted::empty_struct>::value);
adapted::empty_struct e(empty);
std::cout << e << std::endl;

View File

@ -107,6 +107,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
point p(123, 456, 789);
std::cout << at_c<0>(p) << std::endl;

View File

@ -96,6 +96,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
point p = {123, 456, 789};
std::cout << at_c<0>(p) << std::endl;

View File

@ -5,7 +5,7 @@
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/adapted/adt/adapt_assoc_adt.hpp>
#include <boost/fusion/sequence.hpp>
#include <boost/mpl/assert.hpp>
@ -185,4 +185,5 @@ int main()
BOOST_TEST(fusion::front(ec).get()=="marshall mathers");
BOOST_TEST(fusion::back(ec).get()==37);
}
return boost::report_errors();
}

View File

@ -22,6 +22,8 @@ int main()
BOOST_MPL_ASSERT((traits::is_sequence<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};

View File

@ -26,6 +26,8 @@ int main()
BOOST_MPL_ASSERT((traits::is_sequence<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}};

View File

@ -46,6 +46,7 @@ main()
{
typedef boost::tuple<int, std::string> 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!!!");
std::cout << at_c<0>(t) << std::endl;

View File

@ -8,6 +8,20 @@
#include <boost/detail/lightweight_test.hpp>
#include <boost/fusion/sequence/comparison.hpp>
struct not_a_fusion_container {};
template <typename T>
inline bool operator==(not_a_fusion_container, T const&) { return true; }
template <typename T>
inline bool operator!=(not_a_fusion_container, T const&) { return true; }
template <typename T>
inline bool operator<(not_a_fusion_container, T const&) { return true; }
template <typename T>
inline bool operator<=(not_a_fusion_container, T const&) { return true; }
template <typename T>
inline bool operator>(not_a_fusion_container, T const&) { return true; }
template <typename T>
inline bool operator>=(not_a_fusion_container, T const&) { return true; }
void
equality_test()
{
@ -28,6 +42,9 @@ equality_test()
BOOST_TEST(!(v1 == v5));
BOOST_TEST(v5 != v1);
BOOST_TEST(!(v5 == v1));
BOOST_TEST(not_a_fusion_container() == v1);
BOOST_TEST(not_a_fusion_container() != v1);
}
void
@ -51,6 +68,11 @@ ordering_test()
FUSION_SEQUENCE<int, char, bool> v5(5, 'a', true);
v1 >= v5;
#endif
BOOST_TEST(not_a_fusion_container() > v1);
BOOST_TEST(not_a_fusion_container() >= v1);
BOOST_TEST(not_a_fusion_container() < v1);
BOOST_TEST(not_a_fusion_container() <= v1);
}

View File

@ -54,11 +54,14 @@ test()
using namespace test_detail;
nil empty;
(void)empty;
FUSION_SEQUENCE<> empty0;
(void)empty0;
#ifndef NO_CONSTRUCT_FROM_NIL
FUSION_SEQUENCE<> empty1(empty);
(void)empty1;
#endif
FUSION_SEQUENCE<int> t1;

View File

@ -42,6 +42,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
ns::point p(123, 456);
std::cout << at_c<0>(p) << std::endl;

View File

@ -30,6 +30,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
empty_struct e;
std::cout << e << std::endl;

View File

@ -46,6 +46,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
point p(123, 456);
std::cout << at_c<0>(p) << std::endl;

View File

@ -30,6 +30,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct<void> >));
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct<void> >::value);
empty_struct<void> e;
std::cout << e << std::endl;

View File

@ -54,6 +54,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
BOOST_STATIC_ASSERT(!traits::is_view<ns::point>::value);
ns::point p(123, 456);
std::cout << at_c<0>(p) << std::endl;

View File

@ -30,6 +30,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
empty_struct e;
std::cout << e << std::endl;

View File

@ -66,6 +66,7 @@ void run_test()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<Point>));
BOOST_STATIC_ASSERT(!traits::is_view<Point>::value);
Point p(123, 456);
std::cout << at_c<0>(p) << std::endl;

View File

@ -30,6 +30,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<empty_struct>));
BOOST_STATIC_ASSERT(!traits::is_view<empty_struct>::value);
empty_struct e;
std::cout << e << std::endl;

View File

@ -47,8 +47,8 @@ int main()
BOOST_TEST(y.w.value == 42);
}
// Older MSVCs don't generate move ctor by default.
#if !(defined(CI_SKIP_KNOWN_FAILURE) && 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
@ -66,7 +66,7 @@ int main()
BOOST_TEST(x.w.value == 0);
BOOST_TEST(y.w.value == 0);
}
#endif // !(ci && msvc < 14.0)
#endif // !(ci && (msvc < 14.0 || gcc 4.4.x))
return boost::report_errors();
}

View File

@ -42,6 +42,7 @@ main()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
BOOST_STATIC_ASSERT(!traits::is_view<point>::value);
point p(123, 456);
std::cout << at_c<0>(p) << std::endl;

View File

@ -61,6 +61,7 @@ void run_test()
{
BOOST_MPL_ASSERT_NOT((traits::is_view<Point>));
BOOST_STATIC_ASSERT(!traits::is_view<Point>::value);
Point p(123, 456);
std::cout << at_c<0>(p) << std::endl;

View File

@ -47,8 +47,8 @@ int main()
BOOST_TEST(y.w.value == 42);
}
// Older MSVCs don't generate move ctor by default.
#if !(defined(CI_SKIP_KNOWN_FAILURE) && 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
@ -66,7 +66,7 @@ int main()
BOOST_TEST(x.w.value == 0);
BOOST_TEST(y.w.value == 0);
}
#endif // !(ci && msvc < 14.0)
#endif // !(ci && (msvc < 14.0 || gcc 4.4.x))
return boost::report_errors();
}

Some files were not shown because too many files have changed in this diff Show More