Compare commits

...

972 Commits

Author SHA1 Message Date
09f53833cc Rework as esp-idf component 2023-11-23 17:17:05 +01:00
6ee2b188ef [transform_view_ext] Unary transform_view is an Associative Sequence now 2022-09-26 11:41:12 +08:00
03500e4fd3 [transform_view_ext] Updated docs 2022-09-26 11:41:12 +08:00
3c82db82df Merge branch 'develop' 2022-09-26 11:40:31 +08:00
287ca90947 Merge branch 'develop' 2022-09-26 11:40:31 +08:00
6191e9763a Merge remote-tracking branch 'origin/master' 2022-09-26 10:55:17 +08:00
14c22945cc Merge branch 'develop' 2022-09-26 10:54:48 +08:00
a19d919f7b develop from master again (#260)
* Added functional dependency to master

* Revert "Added functional dependency to master"

* Merge branch 'develop'

* Merge branch 'develop'

* Update view.qbk

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* [transform_view_ext] Updated docs

* [transform_view_ext] Unary transform_view is an Associative Sequence now

* [identity_view] Added boost::fusion::identity_view

* Update identity_view.cpp

* Update identity_view.cpp

* [identity_view] Fix for spoiled prvalue

* Update reverse_view.cpp

* Update reverse_view.cpp

* Applied fixes for reverse_view

* Fixed all '*_data' methods in reverse_view

* Diff simplified && update copyrights

* [githubactions] Fixed CI

* Fix Clang 13 `-Wdeprecated-copy` warnings

Clang 13 have new warning under the same group

* [githubactions] Fixed reverse_view test for C++03

* deref_data_impl.hpp: fix missing includes

Co-authored-by: Denis Mikhailov <denismikhaylov38@gmail.com>
Co-authored-by: Nikita Kniazev <nok.raven@gmail.com>
2022-09-26 10:43:24 +08:00
9a65c81640 Merge branch 'develop' 2022-09-26 10:41:11 +08:00
1c858a5fdc Merge branch 'master' into develop 2022-09-26 10:38:15 +08:00
3c749cbf49 Merge branch 'develop' 2022-09-26 10:22:37 +08:00
4c4d2ad66c Merge branch 'master' into develop 2022-09-26 08:59:02 +08:00
63727a3f16 Merge pull request #257 from Kojoley/deprecated-copy-again
Fix Clang 13 `-Wdeprecated-copy` warnings
2022-09-26 08:56:30 +08:00
bbddc4f10a Merge pull request #245 from denzor200/githubactions
Extended CI && Fixed test for C++03
2022-09-26 08:56:30 +08:00
22be72a3c5 deref_data_impl.hpp: fix missing includes 2022-09-26 08:56:30 +08:00
9a2f490130 [githubactions] Fixed reverse_view test for C++03 2022-09-26 08:56:30 +08:00
90721d48e9 Fix Clang 13 -Wdeprecated-copy warnings
Clang 13 have new warning under the same group
2022-09-26 08:56:30 +08:00
427d46e7dc [githubactions] Fixed CI 2022-09-26 08:56:30 +08:00
195a0521eb Merge remote-tracking branch 'sdarwin/githubactions' into githubactions 2022-09-26 08:56:30 +08:00
d2f9a048f7 Merge pull request #237 from denzor200/denzor200-patch-3
Fixed reverse_view
2022-09-26 08:56:10 +08:00
1a9faa6744 Diff simplified && update copyrights 2022-09-26 08:56:10 +08:00
1a16250b06 Merge remote-tracking branch 'origin/develop' into denzor200-patch-3 2022-09-26 08:56:10 +08:00
cdf26a72e9 Fixed all '*_data' methods in reverse_view 2022-09-26 08:56:10 +08:00
2a295202f7 Applied fixes for reverse_view 2022-09-26 08:56:10 +08:00
afba308e47 Update reverse_view.cpp 2022-09-26 08:55:49 +08:00
662567cb9f Update reverse_view.cpp 2022-09-26 08:55:49 +08:00
d9c89fc17c Merge pull request #240 from denzor200/identity_view
Added boost::fusion::identity_view
2022-09-26 08:55:25 +08:00
c59c1790c3 [identity_view] Fix for spoiled prvalue 2022-09-26 08:55:25 +08:00
11abd9b156 Update identity_view.cpp 2022-09-26 08:55:25 +08:00
62b45086c0 Update identity_view.cpp 2022-09-26 08:55:25 +08:00
596056930a [identity_view] Added boost::fusion::identity_view 2022-09-26 08:55:25 +08:00
41aae2c684 Merge pull request #239 from denzor200/transform_view_ext
Transform view ext
2022-09-26 08:55:10 +08:00
41fe9ba9b5 Merge pull request #236 from denzor200/denzor200-patch-2
Fixed CI
2022-09-26 08:55:10 +08:00
2aed5b1ab5 Merge branch 'boostorg:develop' into transform_view_ext 2022-09-26 08:55:10 +08:00
360dd957f2 [transform_view_ext] Unary transform_view is an Associative Sequence now 2022-09-26 08:55:10 +08:00
cc865135c9 Merge remote-tracking branch 'origin/denzor200-patch-4' into transform_view_ext
Conflicts:
	doc/view.qbk
2022-09-26 08:54:52 +08:00
c16e4f046b [transform_view_ext] Updated docs 2022-09-26 08:54:31 +08:00
58e72e74a6 Merge pull request #238 from denzor200/denzor200-patch-4
Fixed typo in the doc && less tautology
2022-09-26 08:54:12 +08:00
638855c861 Update appveyor.yml 2022-09-26 08:54:12 +08:00
cf99c66176 Update appveyor.yml 2022-09-26 08:54:12 +08:00
516a7a7add Update appveyor.yml 2022-09-26 08:54:12 +08:00
41b38d4adc Update view.qbk 2022-09-26 08:53:59 +08:00
fa5f1b7741 Merge pull request #200 from Kojoley/simplify-vector-assign_sequence
vector: Simplify assign_sequence
2022-09-26 08:53:43 +08:00
d8e3cc29da Merge branch 'master' into develop 2022-09-26 08:38:53 +08:00
af411a959c Merge branch 'develop' 2022-09-26 08:38:01 +08:00
51629ef53a Merge branch 'master' into develop 2022-09-26 08:12:29 +08:00
e79a8690f0 Merge branch 'develop' 2022-09-26 08:11:49 +08:00
8f49ff2006 Merge pull request #257 from Kojoley/deprecated-copy-again
Fix Clang 13 `-Wdeprecated-copy` warnings
2022-09-10 06:22:02 +08:00
ba320bf395 deref_data_impl.hpp: fix missing includes 2022-09-09 21:32:01 +03:00
7fe4a887ae Fix Clang 13 -Wdeprecated-copy warnings
Clang 13 have new warning under the same group
2022-09-08 21:29:55 +03:00
6539567952 Merge pull request #255 from boostorg/revert-251-patch-2
Revert "Added functional dependency to master"
2022-07-15 09:58:22 +08:00
6b2a3b96ac Revert "Added functional dependency to master" 2022-07-15 09:56:21 +08:00
499c66537b Merge pull request #251 from denzor200/patch-2
Added functional dependency to master
2022-07-04 18:31:01 +08:00
37ed70fc43 Merge pull request #250 from denzor200/patch-1
Added functional dependency to develop
2022-07-04 18:30:41 +08:00
5d78322e16 Added functional dependency to master 2022-07-04 16:26:07 +06:00
283d1a62c4 Added functional dependency to develop 2022-07-04 16:25:03 +06:00
2dceadd1f0 Merge pull request #249 from fanquake/deprecated_headers
refactor: remove some usage of deprecated headers
2022-04-09 10:30:03 +08:00
6da4ec1ae5 refactor: use core/noncopyable over noncopyable
The later is deprecated:
```cpp

// The header file at this path is deprecated;
// use boost/core/noncopyable.hpp instead.

```
2022-04-08 15:02:43 +01:00
8e58e09ba7 refactor: use core/ref.hpp over ref.hpp
The later has been deprecated:
```cpp

// The header file at this path is deprecated;
// use boost/core/ref.hpp instead.

```
2022-04-08 15:00:20 +01:00
45054c239b Merge pull request #245 from denzor200/githubactions
Extended CI && Fixed test for C++03
2022-01-25 15:32:53 +08:00
145b54d060 [githubactions] Fixed reverse_view test for C++03 2022-01-24 23:40:18 +04:00
d77dc74c7f [githubactions] Fixed CI 2022-01-24 23:27:28 +04:00
b50f10d1dd Merge remote-tracking branch 'sdarwin/githubactions' into githubactions 2022-01-24 23:15:04 +04:00
23e78a5974 Merge pull request #237 from denzor200/denzor200-patch-3
Fixed reverse_view
2022-01-16 18:10:43 +08:00
d22982e3a9 Diff simplified && update copyrights 2022-01-16 09:49:52 +04:00
1c5d3ac6f6 Merge remote-tracking branch 'origin/develop' into denzor200-patch-3 2022-01-16 09:43:41 +04:00
13593be807 Merge pull request #240 from denzor200/identity_view
Added boost::fusion::identity_view
2022-01-16 08:39:38 +08:00
21a449ae46 [identity_view] Fix for spoiled prvalue 2022-01-15 22:22:46 +04:00
d26c2e4212 Update identity_view.cpp 2022-01-12 10:14:07 +04:00
b0f60d5933 Update identity_view.cpp 2022-01-12 09:48:26 +04:00
eed79cb557 [identity_view] Added boost::fusion::identity_view 2022-01-10 21:19:38 +04:00
438d4d1874 Merge pull request #239 from denzor200/transform_view_ext
Transform view ext
2022-01-10 20:57:45 +08:00
9c1105ca00 Merge pull request #236 from denzor200/denzor200-patch-2
Fixed CI
2022-01-10 20:54:20 +08:00
37f64aa622 Merge branch 'boostorg:develop' into transform_view_ext 2022-01-10 09:34:00 +04:00
9be3b29738 Merge pull request #238 from denzor200/denzor200-patch-4
Fixed typo in the doc && less tautology
2022-01-10 07:50:57 +08:00
a57683a68d [transform_view_ext] Unary transform_view is an Associative Sequence now 2022-01-09 16:34:07 +04:00
e3429dac26 Merge remote-tracking branch 'origin/denzor200-patch-4' into transform_view_ext
Conflicts:
	doc/view.qbk
2022-01-09 15:31:15 +04:00
aa5ea2af69 Update view.qbk 2022-01-09 07:45:54 +04:00
2bb8a26c5b Fixed all '*_data' methods in reverse_view 2021-11-08 02:11:31 +04:00
95cf8bdb8d Applied fixes for reverse_view 2021-11-07 23:07:18 +04:00
380a2bc7a0 Update reverse_view.cpp 2021-11-07 03:29:06 +04:00
f07cca743f Update reverse_view.cpp 2021-11-07 03:03:18 +04:00
5db3ed8134 [transform_view_ext] Updated docs 2021-11-06 20:33:38 +04:00
8ea7f31294 Update appveyor.yml 2021-11-05 15:39:10 +04:00
10f44ff5a0 Update appveyor.yml 2021-11-05 14:51:22 +04:00
12c5097cf7 Update appveyor.yml 2021-11-05 14:13:09 +04:00
ccdcdd5610 Merge pull request #235 from denzor200/denzor200-patch-1
Fixed typos in the doc
2021-10-31 21:26:29 +08:00
25f12dedc8 Update sequence.qbk 2021-10-31 13:32:28 +04:00
c199f5c6fa Update sequence.qbk 2021-10-31 13:22:35 +04:00
de61a00d62 Fix doc as per https://github.com/boostorg/fusion/issues/234 2021-09-26 09:00:54 +08:00
3e20342084 Merge pull request #200 from Kojoley/simplify-vector-assign_sequence
vector: Simplify assign_sequence
2021-09-04 14:16:30 +08:00
500e4c120f Update CMakeLists.txt 2021-06-10 01:00:55 +03:00
b0f80684fd Add GitHub Actions config [ci skip] 2021-03-02 14:54:00 +00:00
38060fab3a Merge pull request #228 from eldiener/develop
[skip ci] Add "cxxstd" json field
2021-01-20 08:12:50 +08:00
198458a9f2 [skip ci] Add "cxxstd" json field. The "cxxstd" json field is being added to each Boost library's meta json information for libraries in order to specify the minumum C++ standard compilation level. The value of this field matches one of the values for 'cxxstd' in Boost.Build. The purpose of doing this is to provide information for the Boost website documentation for each library which will specify the minimum C++ standard compilation that an end-user must employ in order to use the particular library. This will aid end-users who want to know if they can successfully use a Boost library based on their C++ compiler's compilation level, without having to search the library's documentation to find this out. 2021-01-19 17:22:00 -05:00
4a699a39f5 Merge pull request #222 from k15tfu/fix-issue-221
Fix definition-of-implicit-copy-constructor-is-deprecated warnings
2020-10-06 09:20:17 +08:00
b93b4c9a86 Merge pull request #226 from giomasce-throwaway/develop
Fix missing name copyright headers.
2020-10-06 09:14:40 +08:00
5a9bfa3d7d Fix missing name copyright headers.
The name was reconstructed from the Git history.
2020-10-05 19:31:34 +02:00
c46e492d45 Merge pull request #223 from Kojoley/deprecated-copy
Fix -Wdeprecated-copy
2020-05-30 01:51:15 +08:00
4979945690 Fix -Wdeprecated-copy 2020-04-30 02:47:37 +03:00
9dca58bd33 Fix definition-of-implicit-copy-constructor-is-deprecated warnings
Fixes #221
2020-04-20 19:02:10 +03:00
c3af48d345 Merge pull request #220 from eldiener/develop
Changes for Embarcadero C++ clang-based compilers, targeting Boost 1.74. Change __BORLANDC__ to BOOST_BORLANDC, which is defined in Boost conf…
2020-04-09 21:44:43 +08:00
70c38c7bf7 Change __BORLANDC__ to BOOST_BORLANDC, which is defined in Boost config for the Embarcadero non-clang-based compilers. 2020-03-31 08:30:37 -04:00
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
26e8b5e459 vector: Simplify assign_sequence 2018-10-10 03:09:54 +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
e3b053f969 Remove detail metafunctions to simplify template 2018-03-15 20:49:38 +09:00
11a3f250b8 Remove unused header 2018-03-15 19:56:07 +09:00
79262831ef Merge pull request #174 from boostorg/testfix/logical-and
Fixed detail::and test
2018-03-15 13:35:23 +09:00
d8f608c8f1 Move is_native_fusion_sequence to detail
in order to reuse it in is_mpl_sequence
2018-03-14 14:53:30 +09:00
2aea153be0 Use fold expression to improbe compile speed 2018-03-14 14:53:07 +09:00
4734cf4a13 Fixed detail::and test
it should be used mpl/assert instead of runtime facility.
2018-03-14 14:41:43 +09:00
d5bd71c886 Update dead/moved links 2018-03-14 00:51:48 +09:00
c3dec40e72 Fixed links to support list.
Gmane had been closed and not back yet.
2018-03-13 23:18:03 +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
101a056a92 Merge pull request #171 from ldionne/develop
Allow incomplete types in fusion::tag_of and fusion::is_native_fusion_sequence
2018-03-03 13:31:22 +09:00
82f677c169 Allow incomplete types in fusion::tag_of and fusion::is_native_fusion_sequence 2018-03-02 02:03:43 -08:00
479bc3133b Merge pull request #169 from boostorg/develop
Pre 1.67.0 beta merge
2018-02-26 01:02:16 +09:00
f61bffb21f Remove $$$ JDG temp $$$ 2018-02-24 16:00:57 +09:00
4c67886cc2 Merge pull request #168 from Kojoley/add-limits-precheck
Add limits precheck
2018-02-21 21:45:13 +09:00
38818fbe3d Add limits precheck 2018-02-20 22:44:34 +03: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
0a8f0f49b2 Merge pull request #167 from boostorg/enhancement/ci
Improve CI performance, like phoenix
2018-01-29 20:04:18 +09:00
cdd1408d2b Update dependency
functional/hash was branched off into contaienr_hash
2018-01-29 12:35:30 +09:00
540ea0ef0c Use build time configuration 2018-01-29 12:03:19 +09:00
671f22b013 Use new common CI marker 2018-01-29 10:34:33 +09:00
dfceaffc58 Update copyright year 2018-01-29 10:30:55 +09:00
2c86e9d18c Added hash option to b2
to mitigate max path length exceeding.
2018-01-29 10:17:06 +09:00
d8e6f406ab Mark as CI in Jamfile not command line
super-project also runs regression test, but they doesn't define that.
2018-01-29 10:15:39 +09:00
b42314fb02 Enabling parallel option to CI job 2018-01-29 10:10:15 +09:00
806b621931 Merge pull request #166 from Kojoley/cwg-defect-945
vector: Fix for compilers not compatible with CWG defect 945
2017-12-24 11:40:58 +09:00
39fb05e40f vector: Fix for compilers not compatible with CWG defect 945
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#945
2017-12-23 18:17:04 +03:00
dc47261890 Merge pull request #164 from Kojoley/fix-map-vs2017-15.5
map: Switch to SFINAE in template parameters
2017-12-14 06:45:27 +08:00
099333b61d map: Switch to SFINAE in template parameters
Fixes #163.

Since C++11 we can do SFINAE in template parameters. VS2017 15.5 doesn't like
the SFINAE on argument here, but do not ask me why, because I have no idea.
2017-12-14 00:05:28 +03:00
71ad390cf0 Merge pull request #162 from boostorg/develop
Post beta merge
2017-12-03 00:08:31 +09:00
821aaee960 Merge pull request #161 from boostorg/regression/msvc-defects
Fixed a regression with msvc 10/11/12
2017-11-25 06:23:17 +08:00
b12c6b6af6 Regenerate preprocessed files. 2017-11-23 22:59:02 +09:00
4eda545405 Fixed a regression with msvc 10/11/12 defect 2017-11-23 22:48:11 +09:00
5fd8c36079 Added test for GitHub issue #159 2017-11-23 22:27:59 +09:00
e6b5879511 Merge pull request #157 from boostorg/develop
Merge develop to master
2017-10-31 09:40:44 +09:00
33ce5701ae Remove depth option from submodule update.
We need `back to the future` sometime, such as merge develop to master.
2017-10-30 14:34:59 +09:00
3cd289836d likewise 2017-10-29 16:40:07 +09:00
ffff00b1a2 Fixed clang and libstdc++ combination. 2017-10-28 09:49:27 +09:00
c19cd1b0b7 Specify toolset version via command line. 2017-10-27 20:59:04 +09:00
3452deb057 Remove unnecessary source. 2017-10-27 20:53:14 +09:00
0876b9558d Remove invalid compiler: key 2017-10-27 20:40:29 +09:00
580364a19e trusty is already default image 2017-10-27 20:34:16 +09:00
d6921c112a Use <cxxstd> to speedup build cycle. 2017-10-27 20:10:23 +09:00
254d570b3d Increase shallow clone depth
to mitigate clone failure because of autocommit bot delay.
2017-10-21 12:19:44 +09:00
5c78fea465 Fixed wording 2017-10-20 22:30:59 +09:00
da4abd0dce Added gcc 4.4 as expected failure. 2017-10-20 22:30:42 +09:00
1faac814e3 Merge pull request #156 from danieljames/develop
Make explicit-failures-markup.xml valid
2017-10-19 19:15:31 +09:00
3085f76d31 Make explicit-failures-markup.xml valid
The xml needs to be valid according to:

https://github.com/boostorg/boost/blob/develop/status/explicit-failures.xsd

It requires that the elements are in a certain order. I suspect that the
scripts don't actually require that, but I don't know for sure.
2017-10-19 10:54:10 +01:00
e18aa85602 Merge pull request #155 from Flast/ci
Update CI status
2017-10-19 13:21:43 +09:00
320386dcf1 Revert "Remove unused env value."
This reverts commit 3e7d928ddd.

This env value is needed to prevent run job with default compiler.
2017-10-18 23:50:10 +09:00
cbda55b962 Added repo local failure markups. 2017-10-18 23:35:48 +09:00
e992658ce3 Skipping some tests due to compiler bug.
It is better to skip such tests on AppVeyor to detect regression.
2017-10-18 23:09:27 +09:00
99699ede5d Added define to determine where running on. 2017-10-18 22:43:08 +09:00
8243b3088b Remove notification 2017-10-18 08:35:15 +09:00
3e7d928ddd Remove unused env value. 2017-10-18 08:09:30 +09:00
26f69719d0 Merge pull request #154 from boostorg/bugfix/forwarding-on-non-variadics
Fixed bugs nesting and copying on c++03.
2017-10-15 14:01:45 +09:00
0e0de6c4f1 Regenerate preprocessed files. 2017-10-15 07:10:25 +09:00
984fcfd276 Delete needless overload. 2017-10-14 03:18:47 +09:00
62f5ccac53 Fixed compile error on copy construction. 2017-10-14 03:16:44 +09:00
cf33f3db4e Added copy assign to deque(03).
move ctor will delete defaulted copy assign.
2017-10-14 03:16:00 +09:00
dfe08dec2c Fixed incorrect overload resolution.
Those functions should not be chosen for copying/moving.
2017-10-14 02:34:44 +09:00
7ec3f1a68f Merge pull request #153 from boostorg/bugfix/array-and-libcxx
Fixed compile error with std::array
2017-10-13 22:12:02 +09:00
42a01fc3f4 Fixed compile error with std::array
libc++ enables std::array in c++98 mode, but <type_traits> doesn't.
2017-10-13 20:04:11 +09:00
0d37235d1c Merge pull request #152 from boostorg/ci
Enabe CI services
2017-10-13 17:03:50 +09:00
e97f58749f Reduce ln flags
BSD coreutils doesn't know -T switch.
2017-10-13 14:46:30 +09:00
80a86fbcd4 Move instead of link
bjam may confuse relative path.
2017-10-13 13:15:38 +09:00
6bef7c98b2 Fixed missing modules. 2017-10-13 13:12:08 +09:00
e4b1233262 Fixed directory hijacking error. 2017-10-13 12:46:54 +09:00
38535926bd Enabling CI services
based on smart_ptr repo
2017-10-13 12:30:17 +09:00
1bce525b30 Merge pull request #151 from boostorg/change-base-of-tuple
Change base of tuple
2017-10-12 23:56:23 +09:00
e606ceeff0 Improve vector value_at performance. 2017-10-07 14:18:29 +09:00
24d1c7fd1a Reduce type deduction which is already known. 2017-10-04 01:43:45 +09:00
e5d073d786 Use compiler generated ctor. 2017-10-04 01:30:27 +09:00
6a9b7f314d Remove unnecessary base check.
fusion::tuple doesn't inherit from fusion::vector now.
2017-10-04 01:13:26 +09:00
0471a65ca2 Change fusion::tuple its base class to vector_data.
This change aims to improve compile time performance for both of vector and tuple.
2017-10-03 22:25:03 +09:00
b6e5285430 Merge pull request #150 from gjasny/remove-circular-include
Remove circular preprocessor include
2017-09-03 05:30:35 +08:00
9cb23af898 Remove circular preprocessor include 2017-09-02 16:09:12 +02:00
437cea006a Merge pull request #149 from kuhlenough/develop
isspace(c) is not a macro in Dinkum clib for VxWorks
2017-08-11 04:42:26 +08:00
7c15df79f2 isspace(c) is not a macro in Dinkum clib for VxWorks, must be in std namespace 2017-08-10 12:19:32 -04:00
503a89dc89 Merge pull request #148 from vtnerd/bugfix/test_nest
Fixed bug in test/sequence/nest.hpp where some results were ignored
2017-07-26 08:01:19 +08:00
b24dfd635b Fixed bug in test/sequence/nest.hpp where some results were ignored 2017-07-25 15:29:57 -04:00
84d8afbb31 Merge pull request #147 from boostorg/develop
Develop to Master
2017-06-19 23:43:44 +09:00
36eac2e77c Added missing include file. 2017-06-18 23:12:50 +09:00
bb782de1ff Merge pull request #146 from Flast/update-workarounds
Update workarounds for msvc 14.1
2017-05-01 13:12:56 +09:00
451e21adb3 Update workarounds for msvc 14.1 2017-04-30 23:26:24 +09:00
e0ceefafb6 Merge pull request #145 from boostorg/test-config
Refresh Jamfile
2017-04-30 22:41:34 +09:00
2952fd254f Use build time config to filter tests. 2017-04-27 22:23:39 +09:00
1ec001888d Reformatting. 2017-02-02 22:08:16 +09:00
98b81ee102 Remove use of deprecated binder. (#144) 2016-11-20 16:58:04 +09:00
f1a619428a Remove unintended file. 2016-11-20 16:41:23 +09:00
715a7fb729 Merge pull request #141 from boostorg/develop
Boost 1.63.0 beta release
2016-11-01 17:03:05 +09:00
fcdcfcd2c5 Merge pull request #143 from boostorg/bugfix/returing-tmp-variable
Fix returing temporary variable warning on MSVC.
2016-11-01 02:44:58 +09:00
6f43cd7f66 Correct testcase condition. 2016-11-01 02:28:45 +09:00
c630611626 Fix returing temporary variable warning on MSVC. 2016-11-01 01:54:10 +09:00
0d8243b36d Merge pull request #142 from Flast/std_array
Adaptor for std::array.
2016-10-31 01:40:57 +09:00
ea9a176312 Include <array> instead of declare std::array.
Some implementations declare it as std::tr1::array and conflict.
2016-10-31 01:13:36 +09:00
1747703b1a Merge pull request #140 from Flast/bugfix/define_struct
Workarounds for older compilers.
2016-10-29 22:28:34 +09:00
c158886591 Workaround for MSVC 12 variadics bug. 2016-10-29 21:29:26 +09:00
5135b5109b Likewise. 2016-10-29 20:57:06 +09:00
490baac6e2 Added workaround for older gcc. 2016-10-29 15:34:49 +09:00
6bd644d43d Don't use iterator for copy/move assign op. 2016-10-29 14:40:47 +09:00
64af83d999 Merge pull request #138 from Flast/movable-define_struct
DEFINE_STRUCT now allows move construct/assign.
2016-10-24 00:00:06 +09:00
e74ccb1cf5 DEFINE_STRUCT now allows move construct/assign. 2016-10-19 01:33:43 +09:00
7b13053c7e Merge pull request #135 from vtnerd/bugfix/vector_conversion_constructor
Make C++11 fusion::vector more consistent with C++03 fusion::vector
2016-10-14 13:51:52 +09:00
ef2dc2aaae Merge pull request #137 from boostorg/empty_struct
Allow to define empty struct.
2016-10-14 11:44:55 +09:00
ef1ca12e81 Added tests for adapted empty struct. 2016-10-14 01:47:02 +09:00
a2b8a8f254 Don't define user-provided special functions.
To allow to define empty struct.
2016-10-13 00:18:14 +09:00
16a069be14 Fix test for non C++11/14. 2016-10-11 08:22:35 +09:00
3b96c3b70b Add, and update, documentation build targets. 2016-10-10 11:39:49 -05:00
61fab16418 Merge branch 'mloskot/boost_fusion_std_array' into develop 2016-10-10 18:46:29 +09:00
928ced256a Adjust directory structure. 2016-10-09 22:14:42 +09:00
599b8d4aef Add, and update, documentation build targets. 2016-10-07 23:07:34 -05:00
1a2a8d67aa Merge pull request #136 from Kojoley/fix-extra-semicolon
Fixed extra semicolon
2016-09-02 00:32:41 +08:00
d5740f8310 Fixed extra semicolon 2016-09-01 17:57:15 +03:00
5906d9c316 Make C++11 fusion::vector more consistent with C++03 fusion::vector
- Construct from elements is enabled iff each argument is_convertible to
    corresponding element.
  - Construct from sequence is enabled iff the single argument is a fusion
    sequence.
  - C++11 vector and tuple also disable construct from sequence that are
    shorter than the destination. C++03 gives incorrect is_convertible
    responses in this situation and fails to compile if that constructor is
    used; C++11 can have instantation errors in
    and_<is_convertible<U, T>...> without the additional check.
  - C++11 tuple and vector support truncation conversion and assignment like
    all other sequences.
2016-08-26 12:45:11 -04:00
45d9b49ee5 Merge pull request #134 from vtnerd/bugfix/tuple_element_construction
Add DISABLE_VARIADIC_VECTOR and SFINAE for c++11 tuple element construction
2016-07-31 15:58:17 +09:00
55150a7fa6 Add DISABLE_VARIADIC_VECTOR and SFINAE for c++11 tuple element construction 2016-07-26 14:53:26 -04:00
27321dd18e Merge pull request #132 from vtnerd/bugfix/nested_sequence_cpp11
Added to nested tests, and fixed C++11 vector copy-from-sequence
2016-06-01 06:47:21 +08:00
79d8e9d11c Added to nested tests, and fixed C++11 vector copy-from-sequence 2016-05-31 16:52:57 -04:00
904d3c2c01 Merge pull request #131 from boostorg/develop
post 1.61.0 beta1
2016-04-02 12:44:16 +08:00
7e4ab4f804 Merge pull request #130 from Flast/bugfix/gcc34
Added workaround for GCC 3.4 due to ambiguous.
2016-03-16 21:36:54 +08:00
3189580857 Added workaround for GCC 3.4 due to ambiguous.
NOTE: GCC 3.3 and earlier are not supported officially by Boost community.
2016-03-16 20:25:59 +09:00
71dcb3e02c Merge pull request #129 from Flast/testfix/gcc44-std_tuple
Tweak std::tuple test for GCC 4.4
2016-03-11 13:24:42 +08:00
82f24e0f73 Tweak std::tuple test for GCC 4.4
due to https://gcc.gnu.org/PR41530 .
2016-03-11 01:01:12 +09:00
f29e1e8209 Merge pull request #128 from Flast/patch-1
Correct workaround condition.
2016-03-09 10:00:31 +08:00
12b25c2c99 Correct workaround condition. 2016-03-09 10:19:22 +09:00
bc6eaf7ab0 Merge pull request #127 from Flast/workaround/for-older-gcc
Workaround for ICE on GCC 4.0/4.1.
2016-03-08 16:26:56 +08:00
275236f86e Workaround for ICE on GCC 4.0 and 4.1. 2016-03-08 15:36:21 +09:00
a8b70d6679 Workaround for ICE on GCC 4.0.0. 2016-03-08 14:43:32 +09:00
7472e70951 Merge pull request #126 from Flast/patch-1
Remove outdated comment.
2016-03-07 19:26:41 +08:00
104f508cef Remove outdated comment. 2016-03-07 19:42:23 +09:00
0263c75cd8 Merge pull request #125 from boostorg/develop
Release Candidate for 1.61.0.
2016-03-03 06:58:37 +08:00
f7b90f2981 Merge pull request #124 from Flast/feature/ticket-11157-remove-BOOST_PP_IS_EMPTY
Remove use of BOOST_PP_IS_EMPTY.
2016-02-17 04:45:16 +08:00
d314798241 Merge pull request #123 from Flast/drop-bom
Drop BOM.
2016-02-17 04:43:51 +08:00
5ed26ec932 Drop Byte-order-Marker. 2016-02-16 23:55:59 +09:00
4ebc028769 Optimize. 2016-02-16 19:32:57 +09:00
99ad77b92f Fix typos. 2016-02-16 16:52:27 +09:00
e3d16edfb3 Merge pull request #122 from Flast/suppress-warnings
Suppress conversion warnings on MSVC.
2016-02-16 02:19:41 +08:00
4173b4b97b Suppress conversion warnings on MSVC. 2016-02-16 01:02:58 +09:00
9b43ac8ee0 More optimization. 2016-02-16 00:40:27 +09:00
c9c2c3bad6 Optimize macros. 2016-02-14 23:53:38 +09:00
d7d47619b4 Tweak PP includes. 2016-02-14 23:41:22 +09:00
100d223be4 Merge pull request #121 from Flast/std-integer_sequence
Detect std::integer_sequence availability.
2016-02-13 13:21:14 +08:00
44c21e0f10 Fixes invalid use of hardcoded "obj." prefix for ADAPT_ASSOC_STRUCT_NAMED and btw. fixes test error since removal of BOOST_PP_IS_EMPTY. 2016-02-13 14:15:53 +09:00
3125c15ff4 Fix BOOST_PP_EMPTY replacement with adapt_assoc_struct 2016-02-13 14:15:53 +09:00
11cc331f82 Add test with namespaced names, as it could break with the macro concatenation to check for BOOST_MPL_PP_TOKEN_EQUAL_auto equality. 2016-02-13 14:15:53 +09:00
d1cd721969 Replace BOOST_FUSION_ADAPT_AUTO with the standard auto keyword.
While BOOST_FUSION_ADAPT_AUTO is still supported for backward compatibiltiy,
auto as been put because it has a better readability.
2016-02-13 14:15:53 +09:00
2e466ac054 Remove BOOST_PP_IS_EMPTY in favor of BOOST_MPL_PP_TOKEN_EQUAL and added auto as synonym for BOOST_FUSION_ADAPT_AUTO.
Fix ticket https://svn.boost.org/trac/boost/ticket/11157
BOOST_MPL_PP_TOKEN_EQUAL is now used to check if auto/BOOST_FUSION_ADAPT_AUTO
was provided as type, telling to deduce members types.
2016-02-13 14:15:53 +09:00
b88daeb697 Detect std::integer_sequence availability.
It will allow to reuse compiler cache easier.
2016-02-13 11:57:41 +09:00
1774972237 Merge pull request #120 from Flast/remove-trailing-void-support
Remove trailing void_ support on variadic vector.
2016-02-11 23:52:35 +08:00
b46aad996a Remove trailing void_ support on variadic vector. 2016-02-11 23:56:07 +09:00
0526f7c04f Merge pull request #118 from Flast/bugfix/ambiguous-ctor
Fix ambiguous ctor, close #11766
2016-01-08 05:39:51 +08:00
53ba3de15a Merge pull request #119 from boostorg/develop
Post 1.60.0 Beta bugfixes.
2015-12-11 15:06:59 +08:00
64b8406c16 Introduce detail::enabler instead of fusion::void_. 2015-12-10 17:06:04 +09:00
2492ff9b25 regen 2015-12-01 01:26:08 +09:00
3919f3ed73 Fix missing header. 2015-12-01 01:16:01 +09:00
12792a6c11 Fix compile error with ambiguous ctor, close #11766.
When a) first elem is sequence b) second (and third) elem is(are) void*,
both of conversion ctor and forwarding ctor are candidate since SFINAE
expression has void* type.
2015-12-01 01:14:52 +09:00
e9d489c07c Merge pull request #117 from fiesh/develop
error: reference to 'ws' is ambiguous
2015-11-24 05:36:16 +08:00
8767d374ea manip.hpp: Do not use "using namespace std;"
Changed "using namespace std;  ws()" into "std::ws()" to avoid ambiguities with a possible "::ws" namespace.
2015-11-23 17:21:59 +01:00
ee718b363f Merge pull request #116 from Flast/workaround/msvc-8/fold
Fix fusion::fold regression with MSVC 8.
2015-11-15 07:12:07 +08:00
87fffbead3 Fix conditional of workaround. 2015-11-14 23:32:46 +09:00
1c05cfc795 Regenerate fusion::fold family. 2015-11-14 20:34:41 +09:00
7cf404d096 SFINAE expression obstructs compile on MSVC 8. 2015-11-13 21:49:27 +09:00
0c18e85ecd Partly fixed fusion::fold regression for MSVC <=8.
It implicitly includes MSVC 9's workaround.
2015-11-13 20:03:12 +09:00
bb8b5afc7f Merge pull request #115 from NumScale/fix-fast-vector-value_at
Fix fusion::at<vector<...>, N> for C array types
2015-11-11 10:02:52 +08:00
3298875ecc Add double identity trick for fast value_at (vectors)
This is a workaround to make decltype(expr)::type compiles
with old compilers.
2015-11-10 14:04:16 +01:00
74c0d5d0ec Fix fusion::at<vector<...>, N> for C array types 2015-11-10 10:55:13 +01:00
e7ec658b62 Merge pull request #114 from ldionne/bugfix/declval
Remove invalid odr-usages of boost::declval.
2015-11-09 07:16:25 +08:00
4d3891ed31 Remove invalid odr-usages of boost::declval. 2015-11-07 16:11:06 -05:00
1bc343660b Merge pull request #113 from Flast/use-enable_if_has_type-instead
Use boost::enable_if_has_type instead.
2015-11-01 16:45:46 +08:00
981f71d04f Use boost::enable_if_has_type instead. 2015-11-01 11:10:11 +09:00
d6c853f7ad Merge pull request #111 from boostorg/develop
1.60.0 beta
2015-10-28 07:42:24 +08:00
f88dbb6876 Merge pull request #112 from Flast/suppress-undefined-inline-warning
Suppress undefined inline function warning.
2015-10-27 07:32:06 +08:00
4d5da0371b Suppress undefined inline function warning. 2015-10-27 07:59:55 +09:00
76f49608c7 Merge pull request #110 from Flast/regression/vector-ctor
Fix compile error on by-elem ctor.
2015-10-24 07:58:06 +08:00
73045b4d49 Fix compile error on by-elem ctor.
Single element vector of fusion sequence cannot construct from its
element type.
2015-10-23 08:29:05 +09:00
18742c6922 Merge pull request #105 from boostorg/variadics
Merge variadics into develop.
2015-10-22 15:40:04 +08:00
277e5ca034 Merge pull request #109 from Flast/o1-vector-at
Make fusion::at<vector<...>,N> O(1).
2015-10-21 09:43:00 +08:00
1ad2e59e07 Make fusion::at<vector<...>,N> O(1). 2015-10-20 20:12:14 +09:00
2c5c74069f Merge pull request #108 from Flast/regen
Regenerate preprocessed files.
2015-10-18 10:28:04 +08:00
a81024f617 Regenerate preprocessed files. 2015-10-17 11:24:19 +09:00
c537da605b Merge pull request #107 from Flast/variadics/rvalue-references
Compliant container-wide requirements.
2015-10-17 10:09:30 +08:00
1d45a87201 Merge pull request #102 from Flast/sfinae-friendly-fold
SFINAE-friendly fusion::fold
2015-10-16 06:32:12 +08:00
ce4ccb929c Check the argument being fusion sequence or not. 2015-10-08 22:23:10 +09:00
5114d9419e Drop unnecessary ctor. 2015-10-07 17:40:55 +09:00
ca0d92e68d R-value references are now container-wide requirements. 2015-10-06 21:29:02 +09:00
c750552a02 Tweak coding style. 2015-10-06 11:28:16 +09:00
a61285a0a1 Merge pull request #106 from Flast/docfix/return-type-of-algorithms
doc: Fix return type of algorithms, close #3358.
2015-10-06 03:48:07 +08:00
999dad386e doc: Fix return type of algorithms, close #3358. 2015-10-06 01:24:45 +09:00
d512378f4e Merge pull request #104 from Flast/doc-updates-for-variadics
Update docs for variadic containers.
2015-09-25 05:37:37 +08:00
ef39bc8651 Update docs for variadic containers. 2015-09-21 16:19:41 +09:00
d2f8ee9f32 Merge pull request #103 from Flast/suppress-warnings
Suppress some warnings.
2015-09-09 17:27:12 +08:00
cbd2e1dc1d Suppress unused warning. 2015-09-09 18:05:04 +09:00
a6d1b303b3 Fix block comment style.
Intel Compiler warns on nested comment.
2015-09-09 13:35:03 +09:00
76b7697ba5 fusion::fold allows to take non-const lv-ref state properly. 2015-09-08 15:14:27 +09:00
1df7fc1dca Revert "Remove unnecessary overloads, state should always be const."
This reverts commit 9b77c26a24.

As discussed on github, the original code was wrong.
2015-09-08 13:59:48 +09:00
9b77c26a24 Remove unnecessary overloads, state should always be const. 2015-09-08 00:22:58 +09:00
59dfeec815 Add workarounds for older MSVC. 2015-09-08 00:18:37 +09:00
4855d1fac1 Merge pull request #101 from Flast/sfinae-friendly-deque
Apply 7fdb320 change into C++98 interface.
2015-09-07 08:36:07 +08:00
d3449ab5e5 Overhaul the fusion::fold family to make SFINAE-friendly. 2015-09-04 00:51:56 +09:00
c30fabf98f Apply 7fdb320 change into C++98 interface. 2015-08-30 17:13:36 +09:00
de3730c325 Merge pull request #100 from Flast/feature/variadic/tuple
Implement C++11 variadic templates based fusion::tuple.
2015-08-27 14:55:11 +08:00
efd595fd10 Merge pull request #99 from Flast/bugfix/issue-11572
Retrieve convert<deque_tag>.
2015-08-26 06:00:13 +08:00
e61d08d953 Fix broken convert<deque_tag>, close issue 11572. 2015-08-26 00:20:07 +09:00
10d9f0ffba Add convert tests for non-assoc containers. 2015-08-25 23:36:32 +09:00
d9e5a620be Merge pull request #97 from Flast/feature/variadic/set
Variadics for fusion::set.
2015-08-20 21:57:19 +08:00
c5ba3af4c0 Added move functions for set. 2015-08-20 22:30:41 +09:00
22994d7e96 Fix a discrepance of element types in make_set. 2015-08-04 16:23:13 +09:00
dc55e5e103 Merge pull request #98 from Flast/bugfix/issue-11517
Fix #11517 (for master)
2015-08-04 08:14:48 +08:00
1bde5c6fa3 Merge pull request #96 from Flast/bugfix/issue-11517
Fix #11517
2015-08-03 08:48:56 +08:00
8242c688e7 Older GCC doesn't accept use of this in constexpr.
Fix #11517
2015-08-03 00:03:40 +09:00
24f527d401 Use BOOST_CONSTEXPR_OR_CONST instead.
Older GCC cannot specify both of const and constexpr to variable decl.

Partially fix #11517
2015-08-02 21:58:20 +09:00
6689de502b Implement variadic make_set. 2015-07-30 11:56:09 +09:00
1646a7252b Merge pull request #95 from Flast/preprocess
Regenerate preprocessed files.
2015-07-28 08:03:50 +08:00
8761ed1b8d Merge pull request #94 from Flast/preprocess
Regenerate preprocessed files.
2015-07-28 08:03:22 +08:00
e37fd170ce Preprocessing... 2015-07-28 01:02:41 +09:00
74f0758bca Fix path to preprocessed files. 2015-07-28 01:02:03 +09: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
b1bb9921e2 Merge pull request #92 from Flast/bugfix/issue-11140
Fix a issue with nested fusion::tuple.
2015-07-27 15:26:10 +08:00
4fa0a5f550 Add tests for nested fusion::tuple. 2015-07-27 13:31:19 +09:00
ed30a7ca6a Fix issue 11140 2015-07-27 13:12:46 +09:00
e0debe282c Merge pull request #91 from ldionne/develop
[Deque] Make the from-sequence constructor SFINAE friendly
2015-07-25 06:24:46 +08:00
7fdb3201fa [Deque] Make the from-sequence constructor SFINAE friendly 2015-07-24 22:11:53 +02:00
8eee897e3f Merge pull request #90 from Flast/feature/variadic/nview
Variadic fusion::nview.
2015-07-16 14:07:41 +08:00
daea1c3142 Merge pull request #89 from Flast/feature/variadic/vector
Variadic fusion::vector.
2015-07-15 16:05:19 +08:00
2f6e162a7e Merge pull request #88 from boostorg/develop
Boost 1.59 beta
2015-07-07 23:26:29 +08:00
bc01b7fa24 Implement C++11 variadic templates based fusion::tuple. 2015-07-03 01:36:49 +09:00
00823cc315 Merge pull request #84 from Flast/feature/variadic/list
Variadic fusion::list.
2015-07-01 08:35:47 +08:00
fc92ba530d Merge pull request #87 from Flast/patch-1
Prevent use of conversion ctor  for copy purpose.
2015-07-01 07:05:05 +08:00
c0fcaae951 Prevent use of conversion ctor for copy purpose.
Some compilers elect conversion ctor for copy purpose in implicitly defined copy ctor with derived class.
2015-07-01 02:25:13 +09:00
298eeef9c9 Remove evil numbered_vector_tag. 2015-06-30 01:28:01 +09:00
62d9833bbf Add missing remove_const. 2015-06-29 21:55:51 +09:00
b4133761e8 Implement C++11 variadic templates based fusion::set 2015-06-29 18:14:25 +09:00
7739e4026d Adjust fusion::nview for variadic templates based fusion::vector
since FUSION_MAX_VECTOR_SIZE won't define in c++11.
2015-06-29 12:11:06 +09:00
f9fda7ce06 Remove intermediate specialization. 2015-06-28 19:42:08 +09:00
1f8ccd7bc3 Support move for make_vector. 2015-06-28 13:46:56 +09:00
969b475462 Implement variadic templates based fusion::vector.
Thanks to Lee Clagett.
2015-06-28 01:15:51 +09:00
c77f84749f Implement variadic generators for fusion::vector. 2015-06-28 01:15:51 +09:00
d937003962 Prepare implementing c++11 variadic based fusion::vector. 2015-06-28 01:15:51 +09:00
6fe816fe89 Merge pull request #85 from Flast/feature/no_bounds_sequence
Feature/no bounds sequence
2015-06-25 23:09:18 +08:00
d29dc277e6 Renaming No-bounds concept to Unbounded concept. 2015-06-25 22:42:44 +09:00
d5ce74dffd Added move ctor/assign for c++11 fusion::list. 2015-06-24 15:26:33 +09:00
a31009e73c at_key and value_at_key are aware of no-bounds sequence. 2015-06-23 11:36:14 +09:00
8aa35da4c4 Add documents for No-bounds sequences. 2015-06-23 11:36:13 +09:00
1e21a4eb7a Add new traits named has_no_bounds.
It is for special usecase: some thing like a window function.
This commit relative to c9ae4fc886 .
Users who wants to access out-of-bounds of sequence, specify new
category to it.

    struct sequence {
        struct category
            : fusion::random_access_traversal_tag
            , fusion::no_bounds_tag {};
        ...
    };

All of bounds related intrinsics of the /no-bounds-sequence/ *should*
guarantee to be well-defined or SFINAE-friendly, or compile error.
2015-06-23 09:44:03 +09:00
5cceded23b Drop unnecessary specialization. 2015-06-23 08:56:58 +09:00
78c5228d93 Move internal type into private. 2015-06-23 00:37:24 +09:00
0e8e857c2f Fix fusion::make_list return type. 2015-06-22 23:43:49 +09:00
d197380540 Implement C++11 list_tie. 2015-06-22 23:08:55 +09:00
3d0412bfd1 constexpr support for variadic list. 2015-06-22 23:08:55 +09:00
275f65f9ad Implement C++11 Variadic Templates based list. 2015-06-22 23:08:55 +09:00
9c7b7754fb Merge pull request #83 from Flast/feature/integer_sequence
C++14 like integer_sequence.
2015-06-22 21:38:44 +08:00
2b14951660 Split c++14 like index_sequence into support/detail. 2015-06-22 21:58:54 +09:00
973f2d3940 Merge pull request #82 from Flast/refactor/just-move-into-cpp03
Move cpp03 list_tie into detail dir.
2015-06-20 06:03:28 +08:00
60cf66ad89 Adjust include path. 2015-06-18 08:26:11 +09:00
fb2e4c502f Move list_tie. 2015-06-18 08:21:08 +09:00
fffbbdebdf Merge pull request #81 from Flast/refactor/just-move-into-cpp03
Move non-variadics into its own cpp03 dir and adjust include paths.
2015-06-17 05:58:07 +08:00
ddcd3cdf93 Likewise. 2015-06-17 01:40:45 +09:00
6df8d5a599 Merge pull request #80 from Flast/refactor/just-move-into-cpp03
[WIP] Just move non-variadics into its own cpp03 dir.
2015-06-16 07:53:27 +08:00
78afb4d3fc Likewise. 2015-06-14 23:05:06 +09:00
94f3b2a08b Merge pull request #79 from Flast/bugfix/nested
Fix issue 11267
2015-06-08 21:57:09 +08:00
3521ea3417 Suppress warnings. 2015-06-08 21:41:54 +09:00
ff25066be2 Remove unnecessary include of mpl::print. 2015-06-08 13:36:49 +09:00
e0f10734b1 Fix issue 11267.
Compiler yields compile error within a function witch used in unevaluate
context of constexpr function because of CWG 1581 [2].

1. https://llvm.org/bugs/show_bug.cgi?id=23135
2. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1581
2015-06-08 11:53:17 +09:00
22268eb083 Merge pull request #78 from Flast/remove_old_workaround
Remove obsolete workaround.
2015-05-23 08:58:40 +08:00
869513768d Remove obsolete workaround.
now it doesn't work properly.
2015-05-23 09:51:06 +09:00
65fae37660 Merge pull request #77 from jzmaddock/patch-3
Stop Using type_traits details.
2015-05-22 08:36:10 +08:00
cac994a7c6 Stop Using type_traits details.
Best not to use type_traits undocumented details, these will be moving soon, and use of this header will warn loud and clear if you continue to use it.
2015-05-21 19:14:12 +01:00
14228e9250 Merge pull request #76 from daminetreg/feature/fix-ticket-11269-adapt-empty-struct
Adds test case for each adapter macros we support to adapt an empty type
2015-05-15 21:20:25 +08:00
9911e05838 Adds test for each case adapter macros we support to adapt an empty type. 2015-05-15 09:09:10 +02:00
f22f1624b5 Merge pull request #75 from daminetreg/feature/fix-ticket-11269-adapt-empty-struct
Fix ticket #11269 to adapt an empty struct
2015-05-06 15:34:31 +08:00
8b1da45bfe Fix 11269 (https://svn.boost.org/trac/boost/ticket/11269) and add test case for it. 2015-05-06 08:21:02 +02:00
3b86f61f15 Merge pull request #74 from Flast/bugfix/11249
Fix #11249
2015-05-05 13:39:04 +08:00
2445f60981 Fix #11249: missing includes. 2015-05-05 14:09:20 +09:00
6f8c02eb6f Merge pull request #73 from daminetreg/develop
Merging master in develop
2015-04-29 22:54:15 +08:00
3c34d639df Merge branch 'master' into develop 2015-04-29 16:20:05 +02:00
b10d91ac82 Merge pull request #72 from daminetreg/master
Fix testcase when BOOST_PP_VARIADICS is disabled
2015-04-29 22:14:33 +08:00
b902afa5a0 fix testcase when BOOST_PP_VARIADICS is disabled. 2015-04-29 15:58:41 +02:00
528e6d16f0 Merge pull request #69 from felgru/develop
fix some typos in the documentation
2015-04-29 16:37:18 +08:00
2153df596b Merge pull request #71 from daminetreg/master
Further test cases and fixes for #11211
2015-04-29 16:16:45 +08:00
ce62bb49f3 fix constructors of DEFINE_STRUCT_INLINE to allow construction with non-constexpr compatible. 2015-04-26 22:19:44 +02:00
265de03026 Add test cases for non-constexpr compatible types. 2015-04-26 22:19:31 +02:00
83fb0ef7a2 Merge branch 'master' into develop 2015-04-23 08:27:30 +08:00
294a5ce644 Merge pull request #70 from daminetreg/feature/fix-for-11211
Remove BOOST_CONSTEXPR on BOOST_FUSION_DEFINE_STRUCT
2015-04-21 15:22:18 +08:00
bbdfc9972e Remove BOOST_CONSTEXPR on BOOST_FUSION_DEFINE_STRUCT constructor as it however adds the requirement that the user provided types are constant enabled. 2015-04-21 08:59:24 +02:00
91966ae524 added test case for https://svn.boost.org/trac/boost/ticket/11211 2015-04-21 03:46:25 +08:00
94f53a8d4c fix a typo 2015-04-20 11:12:54 +02:00
0fcd2aa328 doc: fix typo in documentation of fused_procedure 2015-04-20 11:12:45 +02:00
83a08934c8 Prepare to merge 2015-04-19 11:56:21 +09:00
ccb1aa20d9 Merge pull request #68 from Flast/develop
Fix workaround condition: || v.s. &&.
2015-04-14 18:31:06 +08:00
6e569bcdc3 Fix workaround condition: || v.s. &&.
see: 01a2d6557e (commitcomment-10697799)
2015-04-14 13:39:50 +09:00
de50f65380 fixes #11161 2015-04-01 19:09:42 +08:00
639cf2459d Merge pull request #67 from Flast/master
doc: Fix a typo
2015-04-01 09:15:28 +08:00
1ba1ac3ec8 Merge pull request #66 from boostorg/develop
Last chance for 1.58.0.
2015-04-01 09:15:11 +08:00
0bbea1ea32 doc: Fix a typo 2015-04-01 09:57:55 +09:00
b56eb59595 Merge pull request #65 from Flast/bugfix/msvc
Adjust LWG2408 workaround enabling condition.
2015-03-31 00:00:44 +08:00
01a2d6557e Adjust LWG2408 workaround enabling condition. 2015-03-25 21:49:22 +09:00
91cac41ada Merge pull request #64 from Flast/hotfix/1.58.0
Fix includes.
2015-03-23 10:05:59 +08:00
67f0863cdd Fix includes. 2015-03-22 12:24:18 +09:00
2204f025d3 Merge pull request #61 from Flast/feature/sfinae-friendly-result_of
SFINAE-friendly result_of::invoke
2015-03-19 09:39:54 +08:00
e881ea67cb Merge pull request #63 from Flast/develop
Add tests and documents
2015-03-16 08:43:34 +08:00
84789ec1c3 Merge pull request #62 from Flast/feature/sfinae-friendly-result_of
SFINAE-friendly result_of::invoke for develop
2015-03-12 15:56:13 +08:00
8c72a0012f Merge remote-tracking branch 'origin/develop' into feature/sfinae-friendly-result_of 2015-03-09 10:45:42 +09:00
4b5eb0cde8 Merge pull request #60 from daminetreg/master
After merge of #55 regenerated preprocessed headers as needed by #49.
2015-03-07 08:00:37 +08:00
d8bca006ff Merge pull request #59 from daminetreg/develop
Regenerated preprocessed header as of fix for #49
2015-03-07 08:00:33 +08:00
0954000314 After merge of #55 regenerated preprocessed headers as needed by #49. 2015-03-06 14:51:52 +01:00
2b072973e0 Merge pull request #55 from boostorg/develop
Release Candidate 2 for Boost 1.58.0
2015-03-06 12:15:09 +08:00
2c5b52f3bd Merge pull request #58 from Flast/feature/constexpr
More (maybe fully) support C++11/14 constexpr
2015-03-04 06:56:29 +08:00
f45c94fa43 Merge remote-tracking branch 'origin/develop' into feature/constexpr 2015-03-04 02:20:52 +09:00
2114bfca6c More constexpr and noexcept support.
Note 1: Forwarding functions are specified as a C++14 constexpr since
std::forward is not a constexpr within C++11.

Note 2: Though I'm not sure why it doesn't compile, some declarations
are specified as a C++14 constexpr or non-constexpr.

Note 3: Boost.Tuple adaptation and TR1-based tuple implementations are
not constexpr.
2015-03-03 02:21:02 +09:00
3e66a56b9f Merge pull request #56 from Flast/doc-update
Update docs
2015-02-22 04:39:31 +08:00
d03f79b6fd Update documents and tests for #8270 from Jamboree.
https://svn.boost.org/trac/boost/ticket/8270

see also: b36426c8e3
2015-02-22 01:06:27 +09:00
52eb8768f2 Add test for #9418, abstract types for key of map.
https://svn.boost.org/trac/boost/ticket/9418
2015-02-22 00:11:04 +09:00
197792ac53 Conforming admonitions style to quickbook.
http://www.boost.org/doc/libs/1_57_0/doc/html/quickbook/syntax/block.html#quickbook.syntax.block.admonitions
2015-02-21 19:58:15 +09:00
06428298bb Add docs for std::tuple adaptation. 2015-02-21 19:16:13 +09:00
960ccf5d2c Fix dead links: caused by pull-request #51. 2015-02-21 19:15:49 +09:00
bd4b1cdac6 Fix #10443: SFINAE-friendly result_of::invoke.
It means previous pull-requests (#24) is still incomplete.
2015-02-12 21:21:01 +09:00
e23d153734 Merge pull request #54 from boostorg/fusion_adapters
Type Deducing Fusion adapters into develop
2015-02-11 06:53:28 +08:00
d9337979b1 Merge pull request #50 from daminetreg/fusion_adapters
fusion_adapters : auto adaptation working also in MSVC
2015-02-09 17:57:25 +08:00
92726da079 Merge pull request #48 from boostorg/develop
Release Candidate for Boost 1.58
2015-02-09 06:55:09 +08:00
505d41ea67 Merge pull request #49 from Flast/bugfix/msvc
Fix two major MSVC issues.
2015-02-09 06:53:57 +08:00
02d15bfcb4 Merge pull request #52 from Flast/bugfix/lwg/2408
Workaround for LWG 2408: SFINAE-friendly std::iterator_traits.
2015-02-09 06:53:12 +08:00
fb0f22a296 Merge pull request #53 from Flast/bugfix/documentation
Documentation bugfix.
2015-02-09 06:35:12 +08:00
c5c0147d7d Add many tests for SFINAE-friendly result_of::invoke. 2015-02-08 19:23:06 +09:00
6ab68a29d8 Workaround for LWG 2408: SFINAE-friendly std::iterator_traits.
Now available for GCC(libstdc++v3) < 4.5 and MSVC 12.0.
It means, there is no ambiguous about calling next/prior/... via ADL.
2015-02-05 23:04:36 +09:00
aa1448b77a Merge pull request #51 from Flast/develop
Support removing the C++11 standard reference wrappers.
2015-02-04 04:37:02 +08:00
73a5dde412 Merge remote-tracking branch 'official/develop' into fusion_adapters
Conflicts:
	test/sequence/adapt_struct.cpp
2015-02-02 07:06:52 +01:00
b60219eb8a Fix testcase for MSVC 10.0.
MSVC 10.0/11.0 have <tuple> but don't compile variadic templates.
2015-02-02 04:08:13 +09:00
c6c9d872d3 Factored out the IS_TPL macro. 2015-02-01 17:20:31 +01:00
fc1a60e8e6 Adding typename in front of BOOST_TYPEOF is only needed in MSVC when we check the type of a template. 2015-01-30 18:17:36 +01:00
de43345b34 BUGFIX: Forwarding template parameters for MSVC to deduced_attr_type context thanks to BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS. 2015-01-25 23:05:42 +01:00
382c1e5645 BUGFIX: Expands typename for attribute_type only in case it is really a dependent scope. 2015-01-25 21:48:49 +01:00
588896de45 Revert "BUGFIX: MSVC doesn't accept typename to specify a dependent scope within"
This reverts commit 98247fb97f.
2015-01-25 16:14:45 +01:00
70d5b40a7c BUGFIX: Expands typename for attribute_type only in case it is really a dependent scope. 2015-01-25 16:10:34 +01:00
e4d43b00c1 Cosmetic 2015-01-22 01:02:28 +09:00
995202044c Basic move support for c++03 map 2015-01-21 23:11:57 +09:00
b3c560d3b6 Fix some typos. 2015-01-21 19:38:06 +09:00
3955f76511 Cosmetic 2015-01-21 17:27:14 +09:00
98247fb97f BUGFIX: MSVC doesn't accept typename to specify a dependent scope within
template specialization in C++03 as standard specify it.

This also works on GCC 4.6, 4.8.2 and 4.9 in C++11 and C++03, I needlessly
added this during some debugging where the compiler was telling me to do so.

I shouldn't have followed it's advice, as this breaks compatibility with
other compilers.
2015-01-21 00:28:13 +01:00
5e4978b870 Fix some warnings within tests. 2015-01-21 01:13:19 +09:00
326104a9b7 Fix unexpected overload resolution on MSVC. 2015-01-18 14:15:20 +09:00
ce8bf1079a Support removing the C++11 standard reference wrappers. 2015-01-15 18:58:33 +09:00
28598a7919 doc: Plural form and links. 2015-01-15 18:24:44 +09:00
0360dc44b2 Fix documentation typo of sequence concepts. 2015-01-15 17:48:17 +09:00
fbd6a8a50f Fixing template parameter order and a function parameter type. 2015-01-15 16:13:12 +09:00
e572c382f7 Fixing a broken table notation. 2015-01-15 14:57:48 +09:00
205c0f1eb4 update overview of directory structure. 2015-01-12 23:34:13 +09:00
d7c918e36f Fix ODR-used violations. 2015-01-11 02:15:45 +09:00
f872d1326a The ctor should check which is seqence or not. 2015-01-11 01:15:52 +09:00
54dedc5e98 Update auxiliary.hpp 2015-01-08 19:20:56 +09:00
af1bc25783 - disabling test for now (todo later)
- removing irrelevant tuple test
2015-01-05 17:43:35 +08:00
7d641cbc8f - Update generated preprocessed files
- Disable variadics for MSVC 2013 (flaky compiler still)
2015-01-05 15:49:06 +08:00
f349d48a3f Merge branch 'develop' of github.com:boostorg/fusion into develop 2015-01-05 15:04:34 +08:00
97c863eaa0 (Re)Generating preprocessed files. 2015-01-05 15:03:54 +08:00
85ce2a3eb2 Fix link of result_of::remove_if. 2015-01-05 08:24:14 +09:00
a2269f447e Fix requirements documentation of replace_if. 2015-01-05 08:23:21 +09:00
51d638f51c Fix documentation of transform correctly. 2015-01-05 08:19:31 +09:00
5eb36f590a Merge pull request #47 from Flast/develop
Add tests and flat includes.
2014-12-18 10:38:41 +08:00
b7febc887a Flat includes for std::tuple 2014-12-09 19:54:53 +09:00
45aa4ccf95 Merge pull request #46 from Flast/develop
Improve fusion::deque
2014-12-05 06:17:59 +08:00
24e95c34fb Add tests for #9914 2014-12-05 01:39:27 +09:00
223c7d520f Fix overload resolution failure.
Because the ctor `deque(U &&...)` is also performed as `deque(U const&...)`.
2014-12-05 01:39:27 +09:00
ed9880c161 Fix out of bounds access within {front|back}_extended_deque with empty deque.
The insertion point is not correct with empty deque since the range
{next_down, next_up} is not half-open range.
2014-12-05 01:39:27 +09:00
d05b854c58 Correct variadic based fusion::deque requirements 2014-12-02 08:37:58 +09:00
d185bd5df6 Use call_param for deducing type better. 2014-12-02 08:37:58 +09:00
aa4d67258b Fixed for non rv-ref supporting compiler. 2014-11-30 02:04:32 +09:00
147c76573e Merge pull request #45 from Flast/workaround/for-msvc
Workarounds for MSVC
2014-11-26 07:13:44 +08:00
fbbfc16d2d Workaround for MSVC8.0
I'm not sure why it doesn't compile...
2014-11-26 01:49:07 +09:00
9ab7774fd7 Replace some usage of std::forward to static_cast.
For more details, See inline comment of include/boost/fusion/support/config.hpp .
2014-11-26 01:35:55 +09:00
687668c110 Fix sprious compile error on VS2015 Preview.
MSVC 2015 Preview will treat unary-ctor call as a variable declaration
even if member call follows, which member has the same name with any
other class (i.e. there are no relations between the member and such
class). This issue already reported at [1].

1. https://connect.microsoft.com/VisualStudio/feedback/details/1037783/unary-ctor-call-v-s-variable-decl

    struct foo
    {
        foo(int) {}
        void set() {}
    };

    struct set;

    int main()
    {
        int i;
        foo(i).set(); // VS2015 try to decl `i` here and conflict with above.
    }
2014-11-24 03:07:16 +09:00
2093bf82db Merge pull request #44 from Flast/develop
Fix wrong include
2014-11-19 21:15:46 +08:00
4dd4773d3d Fix wrong include
and add tests for move.
2014-11-19 17:38:16 +09:00
08a6ea79b3 Merge pull request #43 from Flast/vs2015/name-hiding-warning
Mitigate too noisy name-hiding warnings (C4453) on VS2015 Preview.
2014-11-19 16:04:28 +08:00
9075da0790 Mitigate too noisy name-hiding warnings (C4453) on VS2015 Preview.
NOTE: This commit doesn't contain new preprocessed file to review easier.
2014-11-19 13:20:36 +09:00
f68b7b1f5a Merge pull request #42 from daminetreg/fusion_adapters
ADAPT_STRUCT macros supporting type deduction fixes for Clang
2014-11-19 08:33:30 +08:00
2a50f7caad Better patch from Kohei Takahashi! Allows good forwarding on C++11
while still allowing C++03.
2014-11-19 08:31:35 +08:00
c952a5c053 Const correctness fix for result_of::deref_data 2014-11-19 07:54:37 +08:00
bc07cac46c Fix use of non-static "obj" in unevaluated expression context of decltype. 2014-11-18 23:39:53 +01:00
b5018586aa Breaking change of BOOST_FUSION_ADAPT_ADT_NAMED and BOOST_FUSION_ADAPT_ASSOC_ADT_NAMED API to be coherent with the expressions of BOOST_FUSION_ADAPT_ADT thanks to correct usage of BOOST_FUSION_PROXY_PREFIX. 2014-11-18 23:38:47 +01:00
c65000eac8 Merge pull request #41 from Flast/patch-2
`result_of::at<Seq, N>::type` is't defined when sizeof of sequence is less than N
2014-11-19 06:33:04 +08:00
d10f40c489 Merge pull request #40 from Flast/patch-1
result_of::size::value and result_of::size::type::value should be same type
2014-11-19 06:22:41 +08:00
18fa262a4e BUGFIX: Use of non-static member in typedef to retrieve the type. clang doesn't allow this even in unevaluated context like decltype. 2014-11-18 22:50:07 +01:00
c9ae4fc886 result_of::at<Seq, N>::type is't defined when sizeof of sequence is less than N, close #6507, #7651
Original proposals suggest making as a hard error (by MPL asssert /
static assert), however this change just doesn't define due to
SFINAE-friendly.
2014-11-19 02:05:58 +09:00
0f34b3a692 Fixed C++11 implementation of map's result_of::deref_data to return a
reference as expected.
2014-11-18 23:11:20 +08:00
68b4683e95 added missing include 2014-11-18 14:12:07 +08:00
63045e8611 remove unnecessary actor to tighten ADL resolution. the one above it is
sufficient.
2014-11-15 09:54:21 +08:00
f3fa7a1dc6 Fix for fusion pair to make the compiler select the proper copy
constructor and remove a viable, but wrong, constructor. test added.
2014-11-15 09:35:50 +08:00
cc9b043168 result_of::size::value and result_of::size::type::value should be same type, rels to: #7304. 2014-11-13 15:44:30 +09:00
a4660f41af added failing test as per https://github.com/boostorg/fusion/pull/38 2014-11-13 09:03:37 +08:00
6da646631c Merge pull request #38 from ldionne/develop
Fix compilation error with as_deque in C++11.
2014-11-13 07:12:55 +08:00
0ed591d214 Fix compilation error with as_deque in C++11. 2014-11-12 14:59:28 -05:00
15dd9c9d97 test that adapted members can actually be expressions 2014-11-12 11:13:19 +08:00
1dccb553ea Merge pull request #35 from Flast/develop
Minor fixes
2014-11-12 07:39:17 +08:00
a2e32493bb Merge pull request #37 from ldionne/develop
Use BOOST_CONSTEXPR instead of (nonexistant) BOOST_CXX14_CONSTEXPR. (reverted from commit 3280267ed4)
2014-11-12 07:35:19 +08:00
3280267ed4 Merge pull request #37 from ldionne/develop
Use BOOST_CONSTEXPR instead of (nonexistant) BOOST_CXX14_CONSTEXPR.
2014-11-12 07:23:14 +08:00
b7f95ee853 Use BOOST_CONSTEXPR instead of (nonexistant) BOOST_CXX14_CONSTEXPR. 2014-11-11 18:02:03 -05:00
dec799caa8 Merge pull request #36 from ldionne/develop
Fix hard compilation error with nested fusion::cons.
2014-11-12 05:53:39 +08:00
d93e675408 Fix hard compilation error with nested fusion::cons. 2014-11-11 10:23:36 -05:00
06cac9da1a Fix document typo 2014-11-10 16:03:36 +09:00
465c3f273b result_of::{copy,move,swap} are now SFINAE-friendly 2014-11-10 14:38:42 +09:00
6314f1a450 fusion::swap should be inline 2014-11-10 14:34:02 +09:00
916df63a14 Add result_of::{copy,move}, close #5886
Thanks to: Jamboree
2014-11-10 14:32:23 +09:00
b637f2569b Merge pull request #34 from Flast/develop
Misc...
2014-11-09 07:26:20 +08:00
95d2a111ab Add tests for #3225 2014-11-09 02:55:59 +09:00
ff56beaf55 Remove use of boost::blank, close #8622 2014-11-09 00:49:29 +09:00
5dc9f457a0 Merge remote-tracking branch 'origin/develop' into develop 2014-11-09 00:33:56 +09:00
5ff35b6540 Merge pull request #33 from mkurdej/fix/doc-spelling
Fix spelling errors in documentation.
2014-11-08 06:30:29 +08:00
a62956bb12 Fix spelling errors in documentation. 2014-11-07 18:34:18 +01:00
bd5ce92e10 Replace type_traits::ice_and with well documented mpl::and_. 2014-11-08 02:32:06 +09:00
834250a4c8 Describe find(_if) return type clearly. 2014-11-07 13:20:43 +09:00
a87a665072 Fix description of find_if document. 2014-11-07 12:40:25 +09:00
7a7b225fb1 Add boost_tuple_iterator_identity to compare iterator correctly.
And add test for boost_tuple_iterator.
2014-11-06 17:10:31 +09:00
5f416e24fc Use category_of to get correct iterator category. 2014-11-06 17:10:31 +09:00
a7e9bb2df4 Fix to meet constexpr requirements 2014-11-06 17:10:31 +09:00
20ee8d192a Fix missing includes, close ticket #8457.
e.g. Now can compile following simple case.

    #include <boost/fusion/iterator/iterator_facade.hpp>
    #include <boost/fusion/iterator/iterator_adapter.hpp>

    struct null_iterator
        : iterator_facade<null_iterator, forward_traversal_tag> {};

    struct null_adapter
        : iterator_adapter<null_adapter, null_iterator> {};
2014-11-06 17:10:25 +09:00
bf10307430 Merge pull request #32 from Flast/develop
Minor document fixes.
2014-11-03 17:38:43 +08:00
4835310623 Remove unnecessary header, see 5adcb5b 2014-11-03 06:25:08 +09:00
ba0e753cff Fix document typo, close #6090. 2014-11-03 06:24:20 +09:00
b7f0f8856c Tuple document's cosmetic changes 2014-11-03 06:24:20 +09:00
416cd2e2d9 Fix dead links 2014-11-03 06:24:20 +09:00
f3921fee95 Fix tuple heading, close #5324 2014-11-03 06:24:20 +09:00
ec3cefd86f Merge pull request #31 from Flast/develop
Fix three test failures on older and c++03 compiler.
2014-11-02 20:49:23 +08:00
0a13aa5ee4 Change the result_of behaviour with BOOST_RESULT_OF_USE_DECLTYPE
to make consistency between boost::result_of.
2014-11-02 15:08:56 +09:00
7ef4b03249 Fix typo/missing copyright notice, reported by Boost Inspection Report. 2014-11-01 22:12:11 +09:00
f716d2f410 Merge various hotfixes into develop. 2014-11-01 22:00:45 +09:00
1b4acaa1b0 Fix unexpected lookup failure with GCC < 4.5. 2014-11-01 21:16:26 +09:00
4c110d9a88 Regen preprocessed headers. 2014-11-01 20:50:11 +09:00
f73b5362c5 Fix test error with C++03 mode, due to C++11 using-declaration. 2014-11-01 16:53:37 +09:00
df7b766247 Merge pull request #30 from Flast/bugfix/10190/declval
Use boost::declval instead of std::declval, close #10190.
2014-10-31 10:21:38 +08:00
3b3da1a10a Use boost::declval instead of std::declval, close #10190.
Thanks-to: Niklas Angare
2014-10-31 10:09:30 +09:00
6b6d613e15 Merge pull request #29 from Flast/bugfix/msvc-10.0
Fix compile error on MSVC-10 and 11 due to no variadic templates.
2014-10-31 08:21:16 +08:00
c10b94472d Fix compile error on MSVC-10 and 11 due to no variadic templates.
see http://thread.gmane.org/gmane.comp.lib.boost.devel/255086

Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-30 19:44:48 +09:00
101d9d5505 Merge pull request #28 from daminetreg/fusion_adapters
develop merged into fusion_adapters branch
2014-10-29 09:42:55 +08:00
0ffc0f04e3 Merge pull request #27 from Flast/bugfix/misc
Fix some misc issues
2014-10-29 07:22:39 +08:00
c6cb25846c Fix doc typo and describe about c++11 make_map.
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-28 18:34:24 +09:00
8dc502d33a Remove dup of internal macro
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-28 14:25:04 +09:00
179e36fa42 Do not expand BOOST_NO_CXX11_RVALUE_REFERENCES while preprocessing.
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-28 14:24:48 +09:00
90206f5da9 Fix result type mismatch
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-28 11:45:47 +09:00
ae23ffb8b6 Fix include guard mismatch
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-28 11:45:47 +09:00
5ae01ad6a9 - Added sfinae test case for fold
- Some cleanup
2014-10-28 09:06:42 +08:00
d5eb1e793c Merge pull request #26 from ldionne/master
Improve support for constexpr in fusion::nil and its iterators.
2014-10-28 08:12:04 +08:00
3933df13fb Merge pull request #26 from ldionne/master
Improve support for constexpr in fusion::nil and its iterators.
2014-10-27 22:29:56 +08:00
cdfb1a46b3 Improve support for constexpr in fusion::nil and its iterators. 2014-10-27 10:09:26 -04:00
2f850604e8 Merge remote-tracking branch 'official/develop' into fusion_adapters 2014-10-27 14:00:49 +01:00
c704efb49c correct fix for ticket 10676. this is a temporary fix until we overhaul the fold implementation. 2014-10-27 19:45:38 +08:00
06a46de636 Merge pull request #18 from Flast/fix/test/tr1_tuple
Fix test error on non c++11 environment; Boost.TR1 is deprecated.
2014-10-26 22:07:28 +08:00
3192da28e6 Merge pull request #25 from daminetreg/fusion_adapters
BOOST_FUSION_ADAPT_*_ADT macros supporting type deduction
2014-10-23 08:48:07 +08:00
e50f5852e4 Changes the test cases, as the behaviour about const-qualifier for
attribute_type and attribute_const_type when type is deduced can be
different than when the type is provided.

Indeed when specifying attribute_type and attribute_const_type manually
it's possible to provide a type which isn't const qualified as
attribute_const_type. When deducing the types from the get_expr, a const
and a non const qualified type is taken respectively for attribute_type
and attribute_const_type.
2014-10-22 22:06:31 +02:00
98b71154ec Merge pull request #24 from Flast/bugfix/invoke
Fix tickets #10443 completely (SFINAE-friendly invoke).
2014-10-22 19:08:07 +08:00
e014a1d173 Fix #10443 completely.
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-22 19:42:48 +09:00
812e9e379e Fix wrong partial specializations.
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-22 01:02:39 +09:00
ba723a2cad Merge pull request #23 from Flast/bugfix/cxx14-constexpr
Improve constexpr supports
2014-10-21 22:55:54 +08:00
020b22f9b9 Fix test for compiler not supporting BOOST_PP_VARIADIC. 2014-10-20 22:32:28 +02:00
3a28c3fd81 Updates the doc of ADAPT_ADTs macros 2014-10-20 21:35:01 +02:00
cfcdbe1195 Change adapt_assoc_tpl_adt to test type inference from templated type. 2014-10-20 21:25:07 +02:00
03ba146d84 lvalue typedef for acess::struct_member is a dependent scope to templated
parameter when used within BOOST_FUSION_ADAPT_ASSOC_TPL_ADT.

This fixes test sequence/adapt_assoc_tpl_adt.cpp.
2014-10-20 12:54:31 +02:00
acf25e3986 Merge pull request #22 from klemensbaum/master
Avoid unused parameter warning in BOOST_FUSION_DEFINE_STRUCT_INLINE
2014-10-20 17:57:59 +08:00
c921b9ca99 Avoid unused parameter warning in BOOST_FUSION_DEFINE_STRUCT_INLINE 2014-10-20 11:48:42 +02:00
6cad6bef99 fixes ticket #10443. invoke is now sfinae friendly. 2014-10-20 06:23:52 +08:00
3d19bf9d96 fixes ticket 10676. for now, we'll use tr1_result_of. we'll have to do an overhaul of the fold implementation because making it sfinae friendly goes deep down into the low level internals. 2014-10-20 05:55:48 +08:00
bebd553dd6 Use BOOST_CXX14_CONSTEXPR instead of BOOST_CONSTEXPR.
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-19 23:46:36 +09:00
fdb6598194 Make fold as a single return stmt due to C++11 constexpr.
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-18 22:49:09 +09:00
badf3f2a47 Fix forward declaration in conflict with constexpr.
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-18 22:49:08 +09:00
bcc2530f19 Do not expand BOOST_{CXX14_}CONSTEXPR while preprocessing.
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-18 22:49:08 +09:00
ec9530eb15 Merge pull request #21 from Flast/bugfix/include-guard-mismatch
Fix include guard mismatch.
2014-10-17 21:14:57 +08:00
6adde75b54 Merge pull request #20 from Flast/hotfix/include-guard-mismatch
Fix include guard mismatch.
2014-10-17 21:14:39 +08:00
73f058b381 Fix include guard mismatch.
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-17 18:53:45 +09:00
1b2e62f4b9 Fix include guard mismatch.
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-17 18:53:03 +09:00
2b5da49628 lvalue access::struct_member was wrongly set to be adt_attribute_proxy<> instead of adt_attribute_proxy<>::type. Shame on me. 2014-10-12 16:25:59 +02:00
cd0d3ce09a add comments for readability. 2014-10-12 14:51:34 +02:00
644d72ccfe adds type deduction support for BOOST_FUSION_ADAPT_ASSOC_ADT. 2014-10-12 14:51:04 +02:00
103b02fda2 add test for BOOST_FUSION_ADAPT_ADT_NAMED deducing types. 2014-10-12 12:50:56 +02:00
d0b3d163c5 Merge pull request #19 from mgaunard/master
avoid unused argument warning in map_impl
2014-10-10 06:11:22 +08:00
561b762f57 avoid unused argument warning in map_impl 2014-10-09 14:17:17 +02:00
b8c65b976c Fix test error on non-c++11 env.
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-09 00:57:37 +09:00
790810757a Rename the test tr1_tuple_auto_conv to std_tuple_auto_conv.
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-10-09 00:56:17 +09:00
c8ffc6498b add documentation for BOOST_FUSION_ADAPT_ADT and type deduction. 2014-10-07 21:39:18 +02:00
0f2f1776be Merge pull request #17 from jzmaddock/patch-1
Change to test std::tuple now that Boost.TR1 is deprecated
2014-09-27 22:28:07 +08:00
f869aa1591 Change to test std::tuple now that Boost.TR1 is deprecated and due to be removed. 2014-09-27 13:22:56 +01:00
aa7b0a6972 Factoring out the workaround to access last variadic parameter.
Indeed when some parameter are BOOST_PP_EMPTY the last parameter is
accessed correctly but results in a compilation error which doesn't stop
some compiler (e.g. g++) to go through the preprocessing pass and still
compile the binary correctly. But to avoid the error message I used a
workaround which behaves better. I preferred factoring it out to make
clear that there are some reason why this element is strangely accessed.
2014-09-23 23:07:00 +02:00
69e67cd1ad BUGFIX: When VARIADICS are active supporting any of the input combination.
That is : BOOST_FUSION_ADAPT_AUTO, omitting type or specifying type.
2014-09-17 00:47:52 +02:00
f0bc2a2ac1 Fix dependents scopes and typedefs with typename keywords. 2014-08-26 23:32:26 +02:00
727f49b49e Improve adapt_adt test to check more case with type deduction. 2014-08-26 22:00:16 +02:00
0eedba5796 Merge pull request #16 from wmamrak/patch-1
Update according to ticket #10403.
2014-08-26 22:29:38 +08:00
0873af5d3c Update according to ticket #10403.
Someone more familiar with this formatting please verify my changes :)
2014-08-26 14:23:32 +02:00
5102d6874f Merge pull request #15 from danieljames/metadata
Create metadata file.
2014-08-19 06:08:17 +08:00
b6c2e9e10b Add metadata file. 2014-08-18 14:59:22 +01:00
7b089aa589 Add support for BOOST_FUSION_ADAPT_ADT to either deduce types or use specified ones. 2014-08-10 17:09:57 +02:00
52d280983b Fix some includes for consistency and use correct accessors macros.
Since we have accessors macros for wrapped attributes we better use them,
to improve readability of the macros.
2014-08-10 15:27:55 +02:00
fe3682ac02 add type deduction support to BOOST_FUSION_ADAPT_ADT_C_BASE. 2014-08-10 15:15:31 +02:00
c8e4172021 Fix indentation. 2014-08-10 15:11:34 +02:00
64c3fc568c Merge pull request #14 from gnzlbg/develop
Initial constexpr support
2014-08-06 20:15:53 +08:00
c2abefbab8 Initial constexpr support
This allows to use, e.g., boost::fusion::fold within constexpr functions.

The BOOST_CONSTEXPR macro is used to declare functions constexpr.
2014-08-06 11:09:40 +02:00
904ec1e676 Merge pull request #13 from daminetreg/fusion_adapters
BOOST_FUSION_ADAPT_ASSOC_STRUCT* deducing types
2014-07-30 06:03:39 +08:00
0715e996e2 Fix the DEFINE_ASSOC_STRUCT macros to use specific FILLER macros, because they cannot need type deduction. 2014-07-29 22:24:23 +02:00
047b052548 Add missing include. 2014-07-29 22:22:54 +02:00
4f941d9760 Merge pull request #12 from fiesh/develop
add automatic hash function creation
2014-07-28 21:03:12 -03:00
fcb579f208 Documented BOOST_FUSION_ADAT_ASSOC* macros with type inference. 2014-07-27 17:19:15 +02:00
a54c543dd7 Adapted test cases for adapt_assoc_tpl_struct with type deduction. 2014-07-27 16:31:15 +02:00
4b0bed40f7 Renamed macro wrapping attribute to a more descriptive name. 2014-07-27 16:07:47 +02:00
a13d1346f6 Adapted tests of assoc_struct to the type-deducing version of the ADAPT* macros. 2014-07-27 15:51:12 +02:00
d71cf19e0f fix documentation, introduce "See also" block 2014-07-24 17:44:37 +02:00
70410d1e07 replaced tabs with 4 spaces 2014-07-24 14:45:45 +02:00
f7685b1194 add automatic hash function creation 2014-07-24 14:22:55 +02:00
a5d6fd0800 Test adapt_assoc_tpl_struct checking support for type deduction. 2014-07-23 02:49:28 +02:00
5422ba7f8f Adds the possibility to omit the member type in ADAPT_ASSOC* macros usage.
This feature is enabled when BOOST_PP_VARIADICS also is, as it rely on it.
A placeholder for the type can be used when BOOST_PP_VARIADICS isn't
active.
2014-07-23 02:42:30 +02:00
17e49ba448 Adds accessors for the wrapped attributes and provide preliminary support for type deduction to ADAPT_ASSOC* macros. 2014-07-23 00:36:07 +02:00
1ab5eef418 Merge pull request #11 from daminetreg/fusion_adapters
ADAPT_STRUCT_NAMED macros supporting type deduction
2014-06-26 03:57:43 +08:00
34fac0c449 Fix ADAPT_*_C / ADAPT_*_C_BASE macros responsible.
These macros are used to handle generation of boilerplate code or each
member to add to the adapted sequence. And in the commit
abff92ab65 we changed the signature of these
macros to handle generation of proxied object field type deduction, this
change simply fix the related macros.
2014-06-25 00:45:38 +02:00
bf66c12cde Fix the unit test of adapt_struct for consistency with other tests of the same kind. 2014-06-25 00:25:14 +02:00
dd0cee1721 Documented type deduction for ADAPT_STRUCT_NAMED. 2014-06-25 00:24:26 +02:00
abff92ab65 Add support for members types deduction to the ADAPT_STRUCT_NAMED macro. 2014-06-25 00:11:40 +02:00
f64c396c66 Merge pull request #10 from daminetreg/fusion_adapters
Fixes the DEFINE_STRUCT* macros after addition of type deduction for ADAPT_STRUCT
2014-06-18 05:54:22 +08:00
c008b0dc3a Fixes the BOOST_FUSION_DEFINE_STRUCT* macros with an appropriate attributes FILLER macro.
As the BOOST_FUSION_ADAPT_STRUCT_FILLER* macros were changed to handle type
deduction, this breaks the usage that BOOST_FUSION_DEFINE_STRUCT makes from
them.

That is BOOST_FUSION_DEFINE_STRUCT_IMPL expects a simple tuple, while we
now provide a tuple containing the size of a nested tuple which either has
or not the type provided. But in the case of the DEFINE* macros it would be
a non-sense to support this kind of API as a field being defined cannot be
deduced. :)
2014-06-17 22:35:10 +02:00
f022949764 Merge pull request #9 from daminetreg/fusion_adapters
Version of ADAPT_STRUCT that does not require specifying the types of the fields
2014-06-15 08:42:32 +08:00
ae0c976926 Fixes missing inclusion of BOOST_PP_LESS.
This was bringing the std::pair adapt test to fail, because it wasn't
including BOOST_PP_LESS like the other tests.
2014-06-14 12:11:44 +02:00
af812e6207 Fixed ADAPT_STRUCT_FILLER macro call for consistency. 2014-06-14 12:09:04 +02:00
f0eab528e9 Fix adapt_struct test which was missing an using keyword. 2014-06-14 11:40:51 +02:00
9a501785e6 Removed the old auto_* headers. 2014-06-13 23:09:39 +02:00
0e50a02fbc Remove deleted unit tests from Jamfile. 2014-06-13 23:09:39 +02:00
2e60ba6f29 Fixed typos and inconsistencies in ADAPT_STRUCT documentation. 2014-06-13 23:09:39 +02:00
4cf96e14f3 Added test for the new ADAPT_STRUCT API capable to deduce member types. 2014-06-13 23:09:39 +02:00
0000ca263b Removing AUTO_ADAPT_STRUCT_NAMED, AUTO_ADAPT_ASSOC_STRUCT and AUTO_ADAPT_ASSOC_STRUCT_NAMED.
As discussed with Agustín Bergé and Joel de Guzman on https://github.com/boostorg/fusion/pull/3,
it's better to remove the separate macro for the type deducting macros, and
to instead support a flexible API allowing backward compatibility and type
omission.

This is what ADAPT_STRUCT and ADAPT_STRUCT_TPL now provides. All other
macros will be improved in the same way in the following commits.
2014-06-13 23:09:39 +02:00
6483cf4058 Adding documentation of the new ADAPT_STRUCT and ADAPT_STRUCT_TPL macros,
capable of deducing type.
2014-06-13 23:09:39 +02:00
04ce8a788b Enabled new ADAPT_STRUCT_API for ADAPT_TPL_STRUCT. 2014-06-13 23:09:38 +02:00
ce3f2d6020 Added new ADAPT_STRUCT API support for the ADAPT_STRUCT_AS_VIEW macro. 2014-06-13 23:09:38 +02:00
687b2cf097 Factoring out of adapt_struct.hpp all the FILLER_* macros details.
As of BOOST_FUSION_ADAPT_STRUCT without type deduction, there were only
simple attributes filler. Now this need more complex logic to handle both
API: the backward compatible one with type specificiation, the one without
type specification and the non-variadic one which enables omitting the type
specification by providing BOOST_FUSION_ADAPT_AUTO instead of the type.

That's why I extracted the FILLER_* macros details in a separate source
file.
2014-06-13 23:09:38 +02:00
c851252f65 Renaming macros for ADAPT_STRUCT to deduce type or take provided attribute types. 2014-06-13 23:09:38 +02:00
557b3d2dc6 Fix detection of member_type parameter emptiness for BOOST_FUSION_ADAPT_STRUCT.
As BOOST_PP_IS_EMPTY is not a general purpose emptiness checker, we limit
the ways it can be used.
2014-06-13 23:09:38 +02:00
7ef202b794 Moved BOOST_FUSION_ADAPT_STRUCT implementation details to detail/adapt_base.hpp 2014-06-13 23:09:38 +02:00
02b776360a FEATURE: BOOST_FUSION_ADAPT_STRUCT can now also be called completely with
variadics arguments.

The following signature is possible :

 BOOST_FUSION_ADAPT_STRUCT(
        struct_name,
        member_name0,
        (BOOST_FUSION_ADAPT_AUTO, member_name1)
        (member_type2, member_name2)
	member_name3,
        ...
        )
2014-06-13 23:09:38 +02:00
37fc1443ad Improve the BOOST_FUSION_ADAPT_STRUCT macro to work also when there is no variadic support.
This enable the following flexible macro signature when there is
no BOOST_PP_VARIADICS support:

BOOST_FUSION_ADAPT_STRUCT(
    struct_name,
    (member_type0, member_name0)
    (BOOST_FUSION_ADAPT_AUTO, member_name1)
    (,member_name2)
    ...
    )

If BOOST_PP_VARIADICS is active then there is quite more flexibility as it
allows to avoid the type specification:

BOOST_FUSION_ADAPT_STRUCT(
    struct_name,
    (member_type0, member_name0)
    (BOOST_FUSION_ADAPT_AUTO, member_name1)
    (,member_name2)
    (member_name3)
    ...
    )
2014-06-13 23:09:29 +02:00
944c363787 Remove dependency to variadics macros for the old API not deducing types. 2014-06-13 23:07:49 +02:00
6f6bfb3a27 EDITORIAL: Cleaning the ADAPT_STRUCT which can deduce types. 2014-06-13 23:07:32 +02:00
04cbf0d4c6 BUGFIX: Presents the correct field name as a string even if type is deduced. 2014-06-13 23:07:32 +02:00
703bff4ff9 FEATURE: Types of a struct can freely pe provided or deduced, following the user preferences. 2014-06-13 23:07:32 +02:00
7e1c6cdf47 FEATURE: Type deduction for BOOST_FUSION_ADAPT_STRUCT_C_BASE, with preliminary support for providing or deducing the type. 2014-06-13 23:07:16 +02:00
3ca94f5762 DOC: Add some comments to help me understand the adapt macros. 2014-06-13 23:04:09 +02:00
c052b4b452 FEATURE: Making BOOST_FUSION_AUTO_ADAPT_STRUCT variadic. 2014-06-13 23:04:09 +02:00
166132789a DOC: Document the BOOST_FUSION_AUTO* macros.
This documents the AUTO_ADAPT macros :
  * BOOST_FUSION_AUTO_ADAPT_STRUCT
  * BOOST_FUSION_AUTO_ADAPT_STRUCT_NAMED
  * BOOST_FUSION_AUTO_ADAPT_ASSOC_STRUCT
  * BOOST_FUSION_AUTO_ADAPT_ASSOC_STRUCT_NAMED
2014-06-13 23:04:09 +02:00
435fb5c29f EDITORIAL: Reorganize imports. 2014-06-13 23:04:09 +02:00
934463c7b4 FEATURE: BOOST_FUSION_AUTO_ADAPT_ASSOC_STRUCT_NAMED now allows defining a Random Access Sequence and an Associative sequence without providing the type. 2014-06-13 23:04:08 +02:00
a5f87696f2 EDITORIAL: Rename the macro for type deduction to a more expressive and correct name. 2014-06-13 23:04:08 +02:00
2d37b9c22c EDITORIAL: Fixes typos. 2014-06-13 23:04:08 +02:00
f7b14aee35 FEATURE: BOOST_FUSION_AUTO_ADAPT_ASSOC_STRUCT now allows defining a Random Access Sequence and an Associative sequence without providing the type. 2014-06-13 23:04:08 +02:00
8a132ea44a BUGFIX: Fix include path. 2014-06-13 23:04:08 +02:00
5ffab5001e REFACTORING: reused the BOOST_FUSION_AUTO_ADAPT_STRUCT_NAMED_NS macro in BOOST_FUSION_AUTO_ADAPT_STRUCT_NAMED to mimic the non-AUTO versions. 2014-06-13 23:04:08 +02:00
e58bd91f27 EDITORIAL: fixed indentation. 2014-06-13 23:04:08 +02:00
5aa9a89fb8 FEATURE: BOOST_FUSION_AUTO_ADAPT_STRUCT_NAMED_NS which allows listing class attributes to adapt without specifying types. 2014-06-13 23:04:07 +02:00
0d7ad9f6e2 FEATURE: BOOST_FUSION_AUTO_ADAPT_STRUCT_NAMED that does not require specifying the types of the fields. 2014-06-13 23:04:07 +02:00
946957d3dc EDITORIAL: Change parameter names for consistency. 2014-06-13 23:04:07 +02:00
3f965e00d3 #9516 BOOST_FUSION_AUTO_ADAPT_STRUCT that does not require specifying the types of the fields. 2014-06-13 23:04:07 +02:00
10d363837a Merge pull request #8 from Flast/pr/msvc-10.0/test
Fix test error in msvc-10.0
2014-06-12 17:59:44 +08:00
25bb75e3f8 Fix test error in msvc-10.0
Including fusion/adapted/std_tuple.hpp will occur compile error.
  Therefore, entire test should be ignored.

Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-06-12 12:24:46 +09:00
2cc2729f51 Merge pull request #7 from Flast/pr/adapt/tuple
Additional supports adapting (BoostTuple implementations
2014-06-09 21:11:03 +08:00
059c041659 Add test for convert seq to std::tuple
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-06-09 21:59:06 +09:00
f7adae2b3d Add test for convert seq to tuple
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-06-09 21:59:06 +09:00
f5fe438f14 Add mpl::clear implementation for std::tuple
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-06-09 21:59:05 +09:00
38bcd6e779 Add mpl::clear implementation for Boost.Tuple
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-06-09 21:59:05 +09:00
219b4124d7 Add convert implementation for std::tuple
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-06-09 21:59:05 +09:00
39785ddb0e Add convert implementation for Boost.Tuple
Signed-off-by: Kohei Takahashi <flast@flast.jp>
2014-05-29 01:05:19 +09:00
a0c1ec2018 Merge branch 'develop' 2014-05-27 08:45:08 +08:00
1fde7cc293 Merge branch 'origin/develop' 2014-05-01 13:46:22 +08:00
74a5d8804c reverting support for ref pending review 2014-05-01 13:44:45 +08:00
8e4dd16b2d Merge pull request #5 from ericniebler/nil-hpp
Move definition of struct nil_ into its own header
2014-04-24 08:55:17 +08:00
d2633616dc fix copyright 2014-04-23 16:50:58 -07:00
01ed85e0e5 put struct nil_ in its own header to fix incomplete type error with nvcc 2014-04-23 16:47:03 -07:00
6c904779af fixes #5208 2014-04-09 10:03:23 +08:00
41e18be5cf Merge pull request #4 from jamboree/develop
flatten/flatten_view/ref
2014-04-04 14:50:25 +08:00
fd3a18ce1a flatten/flatten_view/ref 2014-04-04 14:38:38 +08:00
21a2621cce Merge branch 'origin/develop' 2014-03-18 23:44:59 +08:00
efad85a925 fixes Ticket #9455 2014-03-18 23:43:23 +08:00
ad90e29cd6 Merge branch 'origin/develop' 2014-03-17 11:04:37 +08:00
72912925cb Merge pull request #3 from correaa/patch-1
Update tag_of.hpp

Declare std::array with struct keyword, as per C++11, not class.
2014-02-08 10:28:43 +00:00
da294ebc6d Update tag_of.hpp
avoid mismatched-tags warning in clang
2014-02-07 22:24:29 -08:00
beba23f36c Merge pull request #2 from alfC/patch-1
Changed static assertion that checks array size
2014-02-04 11:52:57 -08:00
a2874ea5fe Changed static assertion that checks array size
to a more standard way. This avoids an obscure error involving `extension::std_array_size<Array>`
2014-02-04 11:33:06 -08:00
a9ed19e3b8 Merge pull request #2 from ericniebler/gpu-enabled-2
Add function annotations necessary to run Fusion on GPUs
2014-01-28 15:04:23 -08:00
26b28eff93 Merge remote-tracking branch 'upstream/develop' into gpu-enabled-2 2014-01-28 14:35:41 -08:00
e113b31fdd final gpu-enabling tweaks 2014-01-28 14:32:03 -08:00
44d5dca98b Fixed test to work with an explicit operator bool 2014-01-26 19:06:16 -06:00
c04e912866 gpu-enable vector assign 2014-01-23 21:48:52 -08:00
125a8b5957 Merge remote-tracking branch 'upstream/develop' into gpu-enabled-2 2014-01-23 21:30:44 -08:00
e5b0f3c2e1 gpu-enable more functions, but not stream inserters and extractors 2014-01-23 21:30:18 -08:00
4b139914b1 Fixed issue with vectorN calling the wrong vector_dataN constructor 2014-01-23 08:31:50 -06:00
c4f9f0d1b6 gpu-enable functions 2014-01-22 23:55:53 -08:00
aa78028662 Updated changelog
removed unmaintained todo.txt

[SVN r80347]
2014-01-22 22:26:56 -08:00
ec5f8dc5ec Merge branch 'origin/master'
Conflicts:
	doc/html/index.html
	include/boost/fusion/container/map/map_fwd.hpp
2014-01-23 01:08:13 +08:00
867c7e5dfb Merge pull request #1 from ericniebler/preprocess
build target for preprocessing Fusion with wave
2014-01-21 15:12:28 -08:00
e1dc534877 build target for preprocessing Fusion with wave 2014-01-21 14:17:09 -08:00
14580550cf Merge r86524 (Correct broken links to C++ standard papers); fixes #9212
[SVN r86673]
2013-11-13 03:22:55 +00:00
f2e7a184a0 Correct broken links to C++ standard papers. Refs #9212.
[SVN r86524]
2013-10-30 12:51:24 +00:00
93447d3382 Merged 84441 to release
[SVN r86251]
2013-10-12 01:35:27 +00:00
266a7622ba Fixes #9110
[SVN r86165]
2013-10-05 18:47:44 +00:00
de18e59c85 Fixes Ticket #7513
[SVN r86128]
2013-10-01 23:41:38 +00:00
94618528b6 Remove use of obsolete BOOST_NO_TEMPLATED_STREAMS macro.
It was only defined for no-longer-supported-gcc.

[SVN r86062]
2013-09-30 15:56:52 +00:00
a9335aa664 big merge from trunk
[SVN r85669]
2013-09-15 06:27:58 +00:00
8aef19648b big merge from trunk
[SVN r85668]
2013-09-15 06:16:39 +00:00
1f718e4520 Wave: Merging from trunk
[SVN r85641]
2013-09-10 12:47:28 +00:00
66ddb762d3 merge [84937] from trunk, fixes #8759
[SVN r85426]
2013-08-22 19:45:30 +00:00
e12f59ebf2 Add Jonathan Wakely's opinion from Boost ml 2013-07-07 23:17:42 +01:00
0e24ec0a85 Format 2013-07-06 01:03:18 +01:00
31b1ee7f73 Link N3257 paper and the latest Boost thread 2013-07-06 00:57:08 +01:00
53a1a74a10 Refine the ADL comment 2013-07-06 00:55:58 +01:00
1e2841c683 Add comment on conflicts with C++11 range access 2013-07-05 23:51:23 +01:00
17928ac385 Call build-project to build test from top dir 2013-07-05 23:47:48 +01:00
789b86fd6c Wrap #pragma warning BOOST_MSVC 2013-07-05 23:46:46 +01:00
abb15d1158 Add all-in-one header for std_array 2013-07-04 00:57:44 +01:00
cccbc785d6 Include missing array_size.hpp 2013-07-04 00:57:22 +01:00
6849e31db0 Ignore bin directory 2013-07-04 00:56:53 +01:00
6c130b9e44 Fix ticket number 2013-07-02 13:38:38 +01:00
a49eb03483 Fix links 2013-07-02 13:31:37 +01:00
93a1fc3b87 Initial version of std::array for Boost.Fusion
Functional, though ADL issues have not been solved (see README).
2013-07-02 13:28:20 +01:00
3b24ed44f8 specialization of convert_impl for map_tag, refs #8759
[SVN r84937]
2013-07-02 02:10:04 +00:00
7922147716 update fusion Nil template parameters to Nil_ to make ObjC happy. trac #5010
[SVN r84441]
2013-05-23 01:02:52 +00:00
13d00bd6c2 minor updates to fusion docs
[SVN r84440]
2013-05-22 23:28:12 +00:00
56d0d48eb9 added static assert when N is > size of vector
[SVN r84283]
2013-05-14 21:10:02 +00:00
e83960d3e9 allow map keys to be forward declared only
[SVN r84275]
2013-05-13 23:01:05 +00:00
92ee36a556 Fixes #8336
[SVN r84002]
2013-04-21 14:07:21 +00:00
52298c686e Fixes #8456
[SVN r84001]
2013-04-21 14:00:37 +00:00
80b4ce43c5 Fixes #8418
[SVN r84000]
2013-04-21 13:54:59 +00:00
b36426c8e3 patches from tongari: allow custom Associative Sequence which doesn't have fusion::pair
as elements.

[SVN r83455]
2013-03-16 07:28:23 +00:00
d354c5183b Tweaks for MSVC. MSVC version of map is not yet move enables so it is failing the move test
[SVN r82728]
2013-02-04 12:15:02 +00:00
fb3bd4cea8 minor cleanup
[SVN r82727]
2013-02-04 11:54:59 +00:00
9672fe5385 map move supported + value_at_impl added
[SVN r82726]
2013-02-04 11:52:58 +00:00
085c3c25ca more map tests (including move test)
[SVN r82725]
2013-02-04 11:52:18 +00:00
85119dbd21 added as_map
fixed bug: wrong iterator category for map_iterator

[SVN r82721]
2013-02-04 09:52:52 +00:00
764a31e9f5 fixed typo
[SVN r82714]
2013-02-04 06:22:50 +00:00
228401d898 More map tests and more API features implemented + tweaks to affected components
[SVN r82713]
2013-02-04 06:21:45 +00:00
aba201eb4e Added more map tests
[SVN r82712]
2013-02-04 06:20:10 +00:00
9c5d6bcc8c added pair < operator for case where key (first type) is the same.
[SVN r82709]
2013-02-04 04:10:29 +00:00
7b6cf39540 modern c++11 map implemented + various tweaks
[SVN r82708]
2013-02-04 03:49:34 +00:00
996f4152d2 modern c++11 map implemented
[SVN r82707]
2013-02-04 03:46:42 +00:00
d128c6f6aa Moving non-variadic map implementation to detail/cpp03 directory
[SVN r82701]
2013-02-03 11:50:48 +00:00
fec1da027c Cleanup deque to clearly separate the C++03 code from c++11 code
[SVN r82698]
2013-02-03 10:31:46 +00:00
a1a6e42590 Removing the preprocessed file generation which is meant for internal use only
[SVN r82697]
2013-02-03 10:13:41 +00:00
4272519a3c cleanup
[SVN r82670]
2013-01-31 15:56:00 +00:00
9dcdfa323f Better deque conversion
[SVN r82669]
2013-01-31 15:31:28 +00:00
5a520585d8 Fixes #7955
[SVN r82668]
2013-01-31 13:01:36 +00:00
1823f30420 Some cleanup
[SVN r82636]
2013-01-27 14:41:39 +00:00
f96bbef8fa MSVC (VC11) fixes for latest updates
[SVN r82634]
2013-01-27 12:15:26 +00:00
f1687bffcf Added LF at the end
[SVN r82632]
2013-01-27 10:14:40 +00:00
6c17c04ce6 Workaround for some tests on C++11 to allow disambiguation of && and const& arguments to ctors
[SVN r82631]
2013-01-27 10:14:16 +00:00
b7d02a8c55 + Fixes ticket #7914
+ C++11 implementations for make_deque, deque_tie and as_deque

[SVN r82630]
2013-01-27 07:17:01 +00:00
6a47d86d72 C++ fixes
[SVN r82629]
2013-01-27 07:13:58 +00:00
2f61e2b707 disabling some tests with errors on c++11
[SVN r82628]
2013-01-27 04:24:40 +00:00
ea0cad5800 Added fusion::move algorithm
[SVN r82550]
2013-01-19 14:37:00 +00:00
f9d6e05676 Applied patches for Tickets #7738, #7737 and #7646
[SVN r82348]
2013-01-04 01:43:06 +00:00
211b47b47d clarify in fusion docs that associative sequences are not checked for key uniqueness.
[SVN r81891]
2012-12-13 09:41:50 +00:00
6d265316ed Workaround for ObjC (mis)use of nil (from Mathias Gaunard)
[SVN r81628]
2012-11-30 02:31:23 +00:00
8d6200ef58 Removed usage of deprecated macros in Boost.Fusion and Boost.Spirit
[SVN r81569]
2012-11-26 18:44:46 +00:00
e1819c11b2 Remove usage of deprecated macros
[SVN r81452]
2012-11-21 03:12:31 +00:00
cfbbba272e Fixes for Ticket #7569 ( Compile Error using BOOST_FUSION_DEFINE_STRUCT_INLINE with VC10 and GCC <4.5 )
[SVN r81165]
2012-11-04 00:18:41 +00:00
d01148d339 Fixed typo
[SVN r81164]
2012-11-03 23:44:36 +00:00
fc38122f0f Merge from trunk
[SVN r81061]
2012-10-25 02:06:21 +00:00
940c594d3e Merge from trunk
[SVN r81060]
2012-10-25 02:06:04 +00:00
f760ed7b8f removing c++11 requirements in jamfile (mistakenly added)
[SVN r80865]
2012-10-05 06:15:02 +00:00
752f911a91 #7427 (Warning fixes in fusion)
[SVN r80812]
2012-10-02 01:12:19 +00:00
b57cd4ede9 - patch from nathan ridge
- fixed deque regression 

[SVN r80458]
2012-09-09 00:27:37 +00:00
a856857cb7 - Fixed code to allow decltype implementation of boost::result_of with BOOST_RESULT_OF_USE_DECLTYPE defined.
- Reverted sequence/iterator.hpp to original <correct-no-workaround> version.

[SVN r80396]
2012-09-04 13:42:14 +00:00
78ff3d8831 Fixed code to allow decltype implementation of boost::result_of with BOOST_RESULT_OF_USE_DECLTYPE defined.
[SVN r80395]
2012-09-04 13:40:38 +00:00
80799eed95 C++11 fixes for deque
[SVN r80392]
2012-09-04 05:04:26 +00:00
35ec74edbc C++11 fixes for deque
[SVN r80391]
2012-09-04 05:04:25 +00:00
106702d388 Fix to silence MSVC warnings (Nathan Ridge)
[SVN r80368]
2012-09-03 07:08:47 +00:00
4382b64aa7 Updated changelog
removed unmaintained todo.txt

[SVN r80347]
2012-09-01 02:12:46 +00:00
26ba07f36c move-assign test tweaks
[SVN r80346]
2012-09-01 02:02:09 +00:00
a53f93ff1a move-assign for vector
[SVN r80345]
2012-09-01 02:01:26 +00:00
705ca2b61b move-assign for deque
[SVN r80344]
2012-09-01 01:04:12 +00:00
e587ad4d50 Added move-assign test
[SVN r80343]
2012-09-01 01:02:46 +00:00
3613310b62 deque move-ctor OK on gcc
[SVN r80334]
2012-08-31 15:58:31 +00:00
5946ab9936 deque move-ctor OK on gcc
[SVN r80333]
2012-08-31 15:57:49 +00:00
c8b47ca3ca Added move ctors for vector and deque (deque for gcc partially working for now)
no preprocessed files yet

[SVN r80331]
2012-08-31 14:33:12 +00:00
16de1dcd01 Added move ctors for vector and deque (deque for gcc partially working for now)
[SVN r80330]
2012-08-31 14:32:08 +00:00
038976991e Fixed MSVC errors (from Nathan Ridge)
[SVN r80326]
2012-08-31 04:12:29 +00:00
9cceb79cf8 update from trunk fixing http://boost.2283326.n4.nabble.com/fusion-g-4-6-deque-and-c-0x-compile-error-td4632499.html
[SVN r79958]
2012-08-11 02:36:08 +00:00
4ccb4328f6 Fusion: fixing bogus preprocessor directive (missing newline at end of file)
[SVN r79788]
2012-07-28 20:44:56 +00:00
eaf9e79e85 latest patch from Nathan Ridge
[SVN r79306]
2012-07-05 23:40:17 +00:00
a3b0cad1e7 latest oatch from Nathan Ridge
[SVN r79305]
2012-07-05 23:39:50 +00:00
5a51e5d9aa Merge from trunk
[SVN r79274]
2012-07-05 04:40:37 +00:00
85583b5ea9 allow boolean traits implementations to use std::true_type and std::false_type
[SVN r79131]
2012-06-27 04:27:50 +00:00
191a3d75ed Fix for Ticket #6965 from Joel Falcou
[SVN r79099]
2012-06-26 10:16:35 +00:00
136331963a Added test for Ticket #6965
[SVN r79098]
2012-06-26 10:14:49 +00:00
bcb5fd9618 Merge r77879 from trunk.
I think it should have been merged in r78201, and was messing up the doc build
(you can see it in the content in 1.50 beta1).


[SVN r78876]
2012-06-11 01:30:33 +00:00
70589c53c6 BOOST_FUSION_DEFINE_STRUCT_INLINE patch by Nathan Ridge
[SVN r78509]
2012-05-19 01:24:55 +00:00
ed3776ce8c BOOST_FUSION_DEFINE_STRUCT_INLINE patch by Nathan Ridge
[SVN r78508]
2012-05-19 01:24:16 +00:00
a46bd7ab72 patch for ticket #6910 by michel
[SVN r78507]
2012-05-19 01:18:43 +00:00
8ce40ebd0c Patch by Nathan Ridge to allow BOOST_FUSION_ADAPT_ADT adapted classes to be compared using relational operators.
[SVN r78490]
2012-05-17 01:10:20 +00:00
51ade6529c typo fix by Mario Lang
[SVN r78464]
2012-05-14 00:41:42 +00:00
b63c8214d7 Patches from Nathan Ridge using SFINAE to disable the Fusion algorithms for non-{Fusion sequence} types
[SVN r78463]
2012-05-14 00:37:21 +00:00
e03dcc7c54 added missing file from last merge
[SVN r78203]
2012-04-26 02:27:13 +00:00
2e99690387 added missing file from last merge
[SVN r78202]
2012-04-26 00:26:25 +00:00
ee33ea5cfa Merging 77932-78199 from trunk
[SVN r78201]
2012-04-26 00:18:58 +00:00
93477e270e Merging 77932-78199 from trunk
[SVN r78200]
2012-04-26 00:18:51 +00:00
66e8a6d3b7 Doc updates for deque
[SVN r78199]
2012-04-26 00:03:42 +00:00
524769f6fb patch for clang from Michel Morin
[SVN r78176]
2012-04-24 01:40:17 +00:00
654dfbedb8 patch for clang from Michel Morin
[SVN r78175]
2012-04-24 01:39:43 +00:00
fad4a7ebeb rearranging files
[SVN r78106]
2012-04-21 06:09:54 +00:00
01f002f084 tweaked cref_result and ref_result to be non-lazy (for consistency).
[SVN r78058]
2012-04-18 02:57:56 +00:00
c8224c8bdf deque fix for ambiguity and making ctors explicit
[SVN r78056]
2012-04-18 01:18:10 +00:00
b7eda8d0f4 Doc updates for deque
[SVN r77984]
2012-04-15 09:47:19 +00:00
ecc87abaab more deque updates
[SVN r77967]
2012-04-14 00:57:15 +00:00
a3c2258017 Added deque docs
[SVN r77879]
2012-04-10 02:30:18 +00:00
d87b5a8000 minor tweaks
[SVN r77814]
2012-04-07 12:02:16 +00:00
b34a8c79e8 hide detail stuff
[SVN r77812]
2012-04-07 11:07:35 +00:00
ec99f829f3 updates
[SVN r77811]
2012-04-07 10:57:10 +00:00
2936fd30fb missing include
[SVN r77810]
2012-04-07 10:26:23 +00:00
a36f0f95cb c++ port of deque working
[SVN r77809]
2012-04-07 10:08:00 +00:00
93ce3bd9bf c++ port of deque underway
[SVN r77808]
2012-04-07 09:56:07 +00:00
e15c27bc8b partial update (upgrade to c++11)
[SVN r77805]
2012-04-07 07:54:18 +00:00
92d51dcfa8 c++11 version start
[SVN r77803]
2012-04-07 07:43:05 +00:00
221e07a7a3 + bumped copyright date
+ mpl::int_ optimizations

[SVN r77802]
2012-04-07 07:34:00 +00:00
2038772e90 fixed wrong spelling
[SVN r77472]
2012-03-22 10:45:12 +00:00
b6142f1613 Add newlines at end of file to avoid warnings like this:
boost/include/boost/fusion/tuple/detail/preprocessed/tuple.hpp:21:7: warning: no newline at end of file



[SVN r77424]
2012-03-20 02:12:55 +00:00
b159898a47 Fix missed merge from 6338
[SVN r76791]
2012-01-30 00:13:38 +00:00
9a8955fbe1 Merge from trunk
[SVN r75980]
2011-12-16 02:14:17 +00:00
44b337abb0 Fix Ticket #6067
[SVN r75320]
2011-11-05 01:05:04 +00:00
af16a84f09 Bumped copyright date and version to 2.1 (it's about time!) + fixed copyright notices and dates.
[SVN r74887]
2011-10-10 10:38:37 +00:00
4b6dddde03 Bumped copyright date and version to 2.1 (it's about time!).
[SVN r74884]
2011-10-10 10:07:45 +00:00
01156b172a Fix for ticket #6000
[SVN r74873]
2011-10-10 02:33:13 +00:00
295bacb652 Merge from trunk
[SVN r74791]
2011-10-08 08:23:11 +00:00
adb2d8bef0 merge [70965] [73644] [73668] [73669] [73683] [73770] [73771] [73831] [73834] [73854] [73892] [73898] [73899] [73906] [73908] [73927] [74019] [74048] [74113] from trunk to release
[SVN r74325]
2011-09-09 03:27:28 +00:00
518ac25a80 merged [73583] from trunk
[SVN r73606]
2011-08-08 06:29:25 +00:00
efea9aec4b merge [72977] from trunk, regenerate docs
[SVN r73156]
2011-07-16 21:16:10 +00:00
c411c4b479 Spirit: merging from trunk (68457,68496,68522,68865,69218-69219,69294,69476,69546,70042-70043,70049-70050
68320,68374,68377,68386,68449,68461,68485,68487,68489,68491,68494-68495
68519-68520,68523,68536,68538-68539,68548-68549,68576,68645-68646,68657,68676
68687,68690,68707,68725,68744-68746,68852-68853,68861,68870,68904,68906-68908
68938,68989,69020,69022-69024,69091-69092,69103-69104,69114,69136,69138,69193
69202,69204,69233,69292-69293,69295,69297-69298,69323,69337,69378-69380,69405,69429,69431-69433,69444,69450
69495-69498,69501,69503,69505,69527,69599,69618,69623,69670-69671,69673,69675,69772-69774,69780
69811,69813-69814,69833,69851,70045,70211-70216,70224-70225,70483,70549-70550
Fusion: 69113,69118,69137,69583,69589,70008-70009)


[SVN r70577]
2011-03-26 17:18:36 +00:00
13aca9d862 Fusion: merging from trunk stuff needed for Spirit (69113,69118,69137,69583,69589,70008-70009)
[SVN r70575]
2011-03-26 17:10:26 +00:00
dcbebe60f1 Merge from trunk
[SVN r69453]
2011-03-02 00:08:13 +00:00
577a607a14 fix for VC8 (connected to ticket 5084 -showstopper)
[SVN r68325]
2011-01-20 20:47:25 +00:00
aa30bad7e4 fix 1.46 showstopper, fix #5084
[SVN r68264]
2011-01-19 04:28:17 +00:00
94f5406936 Merging fixes to release; fixes #2294 fixes #4918 fixes #3645 refs #2823 refs #1427 refs #2893
[SVN r67792]
2011-01-08 18:38:08 +00:00
cd811f56bc Fusion: merge from trunk
[SVN r67492]
2010-12-29 19:54:59 +00:00
7aa4e2cbda Fusion: merge from trunk - fixed minor doc typos
[SVN r65895]
2010-10-10 20:57:01 +00:00
9792f67700 Fusion: merge from trunk
[SVN r65821]
2010-10-07 22:58:44 +00:00
a3427ea75b Fusion: merge from trunk
[SVN r65735]
2010-10-03 09:46:00 +00:00
134fbf9600 fix for adapted classes' category
[SVN r63805]
2010-07-10 10:06:33 +00:00
199d8b548f merged fusion from the trunk (3)
[SVN r63757]
2010-07-08 18:32:12 +00:00
0f4ac2e9e3 Merge rebuilt fusion documentation with missing file.
[SVN r63737]
2010-07-08 07:50:58 +00:00
32adb57290 Merge rebuilt fusion documentation.
[SVN r63631]
2010-07-04 20:19:01 +00:00
02b2a88bea merged fusion from the trunk (2)
[SVN r63562]
2010-07-03 20:31:16 +00:00
1572e0e9c3 merged fusion from the trunk
[SVN r63560]
2010-07-03 20:10:58 +00:00
649770fdcd merged revision 62675
[SVN r63528]
2010-07-02 18:53:17 +00:00
6f0af5db0a Merge documentation fixes.
* Use `doc/src/*.css` instead of `doc/html/*.css`.
* Remove wiki and people directories.
* Some documentation fixes.
* Left out `minimal.css` changes and boostbook changes because of clashes.


[SVN r63347]
2010-06-26 12:30:09 +00:00
95555f3f20 removes outdated and defunct files
[SVN r61599]
2010-04-26 23:34:55 +00:00
0f33972fe9 fix #1614
[SVN r61487]
2010-04-22 13:14:47 +00:00
a0733ce5ee merge from trunk
[SVN r61204]
2010-04-11 15:41:36 +00:00
dc8225a7aa merge from trunk
[SVN r61189]
2010-04-11 00:31:21 +00:00
994b37e4d5 merge from trunk
[SVN r61043]
2010-04-04 14:43:54 +00:00
3f4d3eb887 Copy generated fusion documentation from trunk.
[SVN r59021]
2010-01-15 06:35:28 +00:00
cda74605fc fusion: merge of associative iterators/views and the new fold interface
[SVN r58618]
2010-01-01 22:00:21 +00:00
b605617c4f Fusion: merged fixes for MSVC warnings from trunk
[SVN r57533]
2009-11-10 02:37:19 +00:00
b22e2b64da rm cmake from the release branch before it goes out broken. Policy dictates that you never commit to release, you commit to trunk and merge to release.
[SVN r56941]
2009-10-17 01:10:45 +00:00
46fc256c2f Sync from trunk (except adapt class)
[SVN r56714]
2009-10-11 16:12:54 +00:00
7615b492af Sync from trunk (except adapt class)
[SVN r56713]
2009-10-11 16:08:54 +00:00
e0a17b552c Fusion: merged nview from trunk
[SVN r56490]
2009-09-30 02:33:30 +00:00
2e805be6df merge from trunk
[SVN r56179]
2009-09-14 07:47:53 +00:00
2f8b91828b merge from trunk
[SVN r56178]
2009-09-14 07:40:39 +00:00
ea5ea7f001 Fix up logic and date_time Jamfiles so they build needed dependencies.
Fix PDF image paths in fusion Jamfile.v2.
Add fusion to the PDF build.

[SVN r55757]
2009-08-24 10:31:43 +00:00
df633002dd Add basic copyright/license to keep cmake out of the inspection report
[SVN r55095]
2009-07-22 21:51:01 +00:00
d726756148 Fusion: merging from trunk
[SVN r53596]
2009-06-03 12:44:26 +00:00
efcab8aae4 Merged revisions 53158,53182,53334,53337,53419,53421,53521,53566-53568,53578,53590 via svnmerge from
https://svn.boost.org/svn/boost/trunk



[SVN r53591]
2009-06-03 04:32:30 +00:00
5dff610007 merge of cmake build files from trunk per beman
[SVN r50756]
2009-01-24 18:57:20 +00:00
d004046aa5 Merge from Trunk
[SVN r49252]
2008-10-10 15:05:47 +00:00
a046e43990 Merge from Trunk
[SVN r49251]
2008-10-10 14:49:19 +00:00
b1ebdd60a6 Merged revisions 48769 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r48769 | eric_niebler | 2008-09-13 21:46:32 -0700 (Sat, 13 Sep 2008) | 1 line
  
  attempt to work around early instantiation problem on edg-based compilers
........


[SVN r48817]
2008-09-17 15:54:23 +00:00
0b58f052b3 doc updates (mini tweaks)
[SVN r47668]
2008-07-22 02:06:42 +00:00
36736edec5 pair doc fix
[SVN r47528]
2008-07-17 23:59:40 +00:00
57725cb393 merge from trunk
[SVN r47205]
2008-07-08 02:43:21 +00:00
099deb4385 merge from trunk
[SVN r47204]
2008-07-08 02:39:55 +00:00
d150ba8498 Fixed non-ascii chars
[SVN r46898]
2008-06-30 12:06:07 +00:00
df2abdab6b Fixed non-ascii chars
[SVN r46897]
2008-06-30 12:04:15 +00:00
780b8bc1b0 With his kind permission, change Jaakko "Järvi" to "Jarvi"
[SVN r46809]
2008-06-28 13:57:20 +00:00
813930aee6 Rebuild a lot of documentation.
[SVN r43650]
2008-03-16 11:38:32 +00:00
9e8d8b1871 Merged revisions 43206,43208-43213 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r43206 | danieljames | 2008-02-10 09:55:03 +0000 (Sun, 10 Feb 2008) | 1 line
  
  Fix some broken links.
........
  r43209 | danieljames | 2008-02-10 14:56:22 +0000 (Sun, 10 Feb 2008) | 1 line
  
  Link to people pages on the website, as they've been removed from the download.
........
  r43210 | danieljames | 2008-02-10 15:02:17 +0000 (Sun, 10 Feb 2008) | 1 line
  
  Point links to the pages that used to be in 'more' to the site.
........
  r43212 | danieljames | 2008-02-10 16:10:16 +0000 (Sun, 10 Feb 2008) | 1 line
  
  Fix links on the home page as well.
........
  r43213 | danieljames | 2008-02-10 16:21:22 +0000 (Sun, 10 Feb 2008) | 1 line
  
  Generated documentation which is no longer generated.
........


[SVN r43214]
2008-02-10 16:39:38 +00:00
4a29dd2a7c merge from trunk
[SVN r42226]
2007-12-21 03:13:31 +00:00
7bd2fd716d merge from trunk
[SVN r42225]
2007-12-21 02:45:20 +00:00
d57e8cfe9e Full merge from trunk at revision 41356 of entire boost-root tree.
[SVN r41370]
2007-11-25 18:38:02 +00:00
ed9cb87ac3 Full merge from trunk at revision 41356 of entire boost-root tree.
[SVN r41369]
2007-11-25 18:07:19 +00:00
1227 changed files with 58571 additions and 22874 deletions

467
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,467 @@
name: GitHub Actions CI
on:
pull_request:
push:
branches:
- master
- develop
- githubactions*
- feature/**
- fix/**
- pr/**
jobs:
posix:
strategy:
fail-fast: false
matrix:
include:
- name: "TOOLSET=gcc-4.4 CXXSTD=98,0x Job 0"
buildtype: "boost"
packages: "g++-4.4"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "gcc-4.4"
cxxstd: "98,0x"
- name: "TOOLSET=gcc-4.6 CXXSTD=03,0x Job 1"
buildtype: "boost"
packages: "g++-4.6"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "gcc-4.6"
cxxstd: "03,0x"
- name: "TOOLSET=gcc-4.7 CXXSTD=03,11 Job 2"
buildtype: "boost"
packages: "g++-4.7"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "gcc-4.7"
cxxstd: "03,11"
- name: "TOOLSET=gcc-4.8 CXXSTD=03,11,1y Job 3"
buildtype: "boost"
packages: "g++-4.8"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "gcc-4.8"
cxxstd: "03,11,1y"
- name: "TOOLSET=gcc-4.9 CXXSTD=03,11,14 Job 4"
buildtype: "boost"
packages: "g++-4.9"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "gcc-4.9"
cxxstd: "03,11,14"
- name: "TOOLSET=gcc-5 CXXSTD=03,11,14,17 Job 5"
buildtype: "boost"
packages: "g++-5"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "gcc-5"
cxxstd: "03,11,14,17"
- name: "TOOLSET=gcc-6 CXXSTD=03,11,14,17 Job 6"
buildtype: "boost"
packages: "g++-6"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "gcc-6"
cxxstd: "03,11,14,17"
- name: "TOOLSET=gcc-7 CXXSTD=03,11,14,17 Job 7"
buildtype: "boost"
packages: "g++-7"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "gcc-7"
cxxstd: "03,11,14,17"
- name: "TOOLSET=gcc-8 CXXSTD=03,11,14,17,2a Job 8"
buildtype: "boost"
packages: "g++-8"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "gcc-8"
cxxstd: "03,11,14,17,2a"
- name: "TOOLSET=clang-3.5 CXXSTD=03,11,14,1z Job 9"
buildtype: "boost"
packages: "clang-3.5"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "clang-3.5"
cxxstd: "03,11,14"
- name: "TOOLSET=clang-3.6 CXXSTD=03,11,14,1z Job 10"
buildtype: "boost"
packages: "clang-3.6"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "clang-3.6"
cxxstd: "03,11,14"
- name: "TOOLSET=clang-3.7 CXXSTD=03,11,14,1z Job 11"
buildtype: "boost"
packages: "clang-3.7"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "clang-3.7"
cxxstd: "03,11,14"
- name: "TOOLSET=clang-3.8 CXXSTD=03,11,14,1z Job 12"
buildtype: "boost"
packages: "clang-3.8"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "clang-3.8"
cxxstd: "03,11,14"
- name: "TOOLSET=clang-3.9 CXXSTD=03,11,14,1z Job 13"
buildtype: "boost"
packages: "clang-3.9"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "clang-3.9"
cxxstd: "03,11,14"
- name: "TOOLSET=clang-4.0 CXXSTD=03,11,14,1z Job 14"
buildtype: "boost"
packages: "clang-4.0"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: ""
llvm_ver: ""
toolset: "clang-4.0"
cxxstd: "03,11,14"
- name: "TOOLSET=clang-5.0 CXXSTD=03,11,14,17,2a Job 15"
buildtype: "boost"
packages: "clang-5.0"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: "xenial"
llvm_ver: "5.0"
toolset: "clang-5.0"
cxxstd: "03,11,14,17,2a"
- name: "TOOLSET=clang-6.0 CXXSTD=03,11,14,17,2a Job 16"
buildtype: "boost"
packages: "clang-6.0"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: "xenial"
llvm_ver: "6.0"
toolset: "clang-6.0"
cxxstd: "03,11,14,17,2a"
- name: "TOOLSET=clang-7 CXXSTD=03,11,14,17,2a Job 17"
buildtype: "boost"
packages: "clang-7"
packages_to_remove: ""
os: "ubuntu-20.04"
container: "ubuntu:16.04"
cxx: "g++"
sources: ""
llvm_os: "xenial"
llvm_ver: "7"
toolset: "clang-7"
cxxstd: "03,11,14,17,2a"
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
steps:
- name: Check if running in container
if: matrix.container != ''
run: echo "GHA_CONTAINER=${{ matrix.container }}" >> $GITHUB_ENV
- name: If running in container, upgrade packages
if: matrix.container != ''
run: |
apt-get -o Acquire::Retries=3 update && DEBIAN_FRONTEND=noninteractive apt-get -y install tzdata && apt-get -o Acquire::Retries=3 install -y sudo software-properties-common wget curl apt-transport-https make apt-file sudo unzip libssl-dev build-essential autotools-dev autoconf automake g++ libc++-helpers python ruby cpio gcc-multilib g++-multilib pkgconf python3 ccache libpython-dev
sudo apt-add-repository ppa:git-core/ppa
sudo apt-get -o Acquire::Retries=3 update && apt-get -o Acquire::Retries=3 -y install git
python_version=$(python3 -c 'import sys; print("{0.major}.{0.minor}".format(sys.version_info))')
sudo wget https://bootstrap.pypa.io/pip/$python_version/get-pip.py
sudo python3 get-pip.py
sudo /usr/local/bin/pip install cmake
- uses: actions/checkout@v2
- name: linux
shell: bash
env:
CXX: ${{ matrix.cxx }}
SOURCES: ${{ matrix.sources }}
LLVM_OS: ${{ matrix.llvm_os }}
LLVM_VER: ${{ matrix.llvm_ver }}
PACKAGES: ${{ matrix.packages }}
PACKAGES_TO_REMOVE: ${{ matrix.packages_to_remove }}
JOB_BUILDTYPE: ${{ matrix.buildtype }}
TOOLSET: ${{ matrix.toolset }}
CXXSTD: ${{ matrix.cxxstd }}
COMPILER: ${{ matrix.compiler }}
TRAVIS_BRANCH: ${{ github.base_ref }}
TRAVIS_OS_NAME: "linux"
run: |
echo '==================================> SETUP'
echo '==================================> PACKAGES'
set -e
if [ -n "$PACKAGES_TO_REMOVE" ]; then sudo apt-get purge -y $PACKAGES_TO_REMOVE; fi
echo ">>>>> APT: REPO.."
for i in {1..3}; do sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" && break || sleep 2; done
if test -n "${LLVM_OS}" ; then
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
if test -n "${LLVM_VER}" ; then
sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS}-${LLVM_VER} main"
else
# Snapshot (i.e. trunk) build of clang
sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS} main"
fi
fi
echo ">>>>> APT: UPDATE.."
sudo -E apt-get -o Acquire::Retries=3 update
if test -n "${SOURCES}" ; then
echo ">>>>> APT: INSTALL SOURCES.."
for SOURCE in $SOURCES; do
sudo -E apt-add-repository ppa:$SOURCE
done
fi
echo ">>>>> APT: INSTALL ${PACKAGES}.."
sudo -E DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Retries=3 -y --no-install-suggests --no-install-recommends install ${PACKAGES}
echo '==================================> INSTALL AND COMPILE'
set -e
export TRAVIS_BUILD_DIR=$(pwd)
export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')}
export VCS_COMMIT_ID=$GITHUB_SHA
export GIT_COMMIT=$GITHUB_SHA
export REPO_NAME=$(basename $GITHUB_REPOSITORY)
export USER=$(whoami)
export CC=${CC:-gcc}
export PATH=~/.local/bin:/usr/local/bin:$PATH
if [ "$JOB_BUILDTYPE" == "boost" ]; then
echo '==================================> INSTALL'
BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
cd ..
git clone --depth 1 -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root
cd boost-root
git submodule init libs/array
git submodule init libs/assert
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
git submodule init libs/function
git submodule init libs/function_types
git submodule init libs/functional
git submodule init libs/integer
git submodule init libs/iterator
git submodule init libs/lambda
git submodule init libs/move
git submodule init libs/mpl
git submodule init libs/optional
git submodule init libs/predef
git submodule init libs/preprocessor
git submodule init libs/smart_ptr
git submodule init libs/static_assert
git submodule init libs/throw_exception
git submodule init libs/tuple
git submodule init libs/type_index
git submodule init libs/type_traits
git submodule init libs/typeof
git submodule init libs/utility
git submodule init libs/headers tools/boost_install tools/build
git submodule update
rm -rf libs/fusion
cp -rp $TRAVIS_BUILD_DIR libs/fusion
ln -s $(pwd)/libs/fusion $TRAVIS_BUILD_DIR
./bootstrap.sh
./b2 headers
echo '==================================> SCRIPT'
./b2 -j`(nproc || sysctl -n hw.ncpu) 2> /dev/null` libs/fusion/test toolset=$TOOLSET cxxstd=$CXXSTD
fi
osx:
strategy:
fail-fast: false
matrix:
include:
- name: "TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,1 Job 18"
buildtype: "boost"
packages: ""
os: "macos-10.15"
cxx: "clang++"
sources: ""
llvm_os: ""
llvm_ver: ""
xcode_version: 11.7
toolset: "clang"
compiler: "clang++"
cxxstd: "03,11,14,1z"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Set DEVELOPER_DIR
if: matrix.xcode_version != ''
run: echo "DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode_version }}.app/Contents/Developer" >> $GITHUB_ENV
- name: Test DEVELOPER_DIR
run: echo $DEVELOPER_DIR
- name: "osx"
shell: bash
env:
CXX: ${{ matrix.cxx }}
SOURCES: ${{ matrix.sources }}
LLVM_OS: ${{ matrix.llvm_os }}
LLVM_VER: ${{ matrix.llvm_ver }}
PACKAGES: ${{ matrix.packages }}
JOB_BUILDTYPE: ${{ matrix.buildtype }}
TOOLSET: ${{ matrix.toolset }}
CXXSTD: ${{ matrix.cxxstd }}
COMPILER: ${{ matrix.compiler }}
TRAVIS_BRANCH: ${{ github.base_ref }}
TRAVIS_OS_NAME: "osx"
run: |
echo '==================================> SETUP'
set -e
sudo mv /Library/Developer/CommandLineTools /Library/Developer/CommandLineTools.bck
echo '==================================> PACKAGES'
echo '==================================> INSTALL AND COMPILE'
set -e
export TRAVIS_BUILD_DIR=$(pwd)
export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')}
export VCS_COMMIT_ID=$GITHUB_SHA
export GIT_COMMIT=$GITHUB_SHA
export REPO_NAME=$(basename $GITHUB_REPOSITORY)
export USER=$(whoami)
export CC=${CC:-gcc}
export PATH=~/.local/bin:/usr/local/bin:$PATH
if [ "$JOB_BUILDTYPE" == "boost" ]; then
echo '==================================> INSTALL'
BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
cd ..
git clone --depth 1 -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root
cd boost-root
git submodule init libs/array
git submodule init libs/assert
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
git submodule init libs/function
git submodule init libs/function_types
git submodule init libs/functional
git submodule init libs/integer
git submodule init libs/iterator
git submodule init libs/lambda
git submodule init libs/move
git submodule init libs/mpl
git submodule init libs/optional
git submodule init libs/predef
git submodule init libs/preprocessor
git submodule init libs/smart_ptr
git submodule init libs/static_assert
git submodule init libs/throw_exception
git submodule init libs/tuple
git submodule init libs/type_index
git submodule init libs/type_traits
git submodule init libs/typeof
git submodule init libs/utility
git submodule init libs/headers tools/boost_install tools/build
git submodule update
rm -rf libs/fusion
cp -rp $TRAVIS_BUILD_DIR libs/fusion
ln -s $(pwd)/libs/fusion $TRAVIS_BUILD_DIR
./bootstrap.sh
./b2 headers
echo '==================================> SCRIPT'
./b2 -j`(nproc || sysctl -n hw.ncpu) 2> /dev/null` libs/fusion/test toolset=$TOOLSET cxxstd=$CXXSTD
fi

251
.travis.yml Normal file
View File

@ -0,0 +1,251 @@
# Copyright 2016, 2017 Peter Dimov
# 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)
language: cpp
sudo: false
os:
- linux
- osx
env:
matrix:
- BOGUS_JOB=true
matrix:
exclude:
- env: BOGUS_JOB=true
include:
- os: linux
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:
packages:
- g++-4.8
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=gcc-4.9 CXXSTD=03,11,14
addons:
apt:
packages:
- g++-4.9
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=gcc-5 CXXSTD=03,11,14,17
addons:
apt:
packages:
- g++-5
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=gcc-6 CXXSTD=03,11,14,17
addons:
apt:
packages:
- g++-6
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=gcc-7 CXXSTD=03,11,14,17
addons:
apt:
packages:
- g++-7
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=gcc-8 CXXSTD=03,11,14,17,2a
addons:
apt:
packages:
- 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
- os: linux
dist: xenial
env: TOOLSET=clang-3.6 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.6
- os: linux
dist: xenial
env: TOOLSET=clang-3.7 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.7
- os: linux
dist: xenial
env: TOOLSET=clang-3.8 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.8
- os: linux
dist: xenial
env: TOOLSET=clang-3.9 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.9
- os: linux
dist: xenial
env: TOOLSET=clang-4.0 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-4.0
- os: linux
dist: xenial
env: TOOLSET=clang-5.0 CXXSTD=03,11,14,17,2a
addons:
apt:
packages:
- clang-5.0
sources:
- 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
install:
- BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
- cd ..
- git clone --depth 1 -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root
- cd boost-root
- git submodule init libs/array
- git submodule init libs/assert
- 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
- git submodule init libs/function
- git submodule init libs/function_types
- git submodule init libs/functional
- git submodule init libs/integer
- git submodule init libs/iterator
- git submodule init libs/lambda
- git submodule init libs/move
- git submodule init libs/mpl
- git submodule init libs/optional
- git submodule init libs/predef
- git submodule init libs/preprocessor
- git submodule init libs/smart_ptr
- git submodule init libs/static_assert
- git submodule init libs/throw_exception
- git submodule init libs/tuple
- git submodule init libs/type_index
- git submodule init libs/type_traits
- git submodule init libs/typeof
- git submodule init libs/utility
- git submodule init libs/headers tools/boost_install tools/build
- git submodule update
- rm -rf libs/fusion
- mv $TRAVIS_BUILD_DIR libs/fusion
- ln -s $(pwd)/libs/fusion $TRAVIS_BUILD_DIR
- ./bootstrap.sh
- ./b2 headers
script:
- ./b2 -j`(nproc || sysctl -n hw.ncpu) 2> /dev/null` libs/fusion/test toolset=$TOOLSET cxxstd=$CXXSTD

55
CMakeLists.txt Normal file
View File

@ -0,0 +1,55 @@
# 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
if(NOT DEFINED IDF_TARGET)
cmake_minimum_required(VERSION 3.5...3.20)
project(boost_fusion VERSION "${BOOST_SUPERPROJECT_VERSION}" 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
Boost::functional
)
else()
FILE(GLOB_RECURSE headers include/*.h include/*.hpp)
idf_component_register(
SRCS
${headers}
INCLUDE_DIRS
include
REQUIRES
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
boost_functional
)
endif()

96
appveyor.yml Normal file
View File

@ -0,0 +1,96 @@
# Copyright 2016, 2017 Peter Dimov
# 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)
version: 1.0.{build}-{branch}
shallow_clone: true
environment:
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-9.0
ADDRMD: 32
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-10.0
ADDRMD: 32
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-11.0
ADDRMD: 32
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-12.0
ADDRMD: 32
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
- if "%APPVEYOR_REPO_BRANCH%" == "master" set BOOST_BRANCH=master
- cd ..
- git clone --depth 1 -b %BOOST_BRANCH% https://github.com/boostorg/boost.git boost-root
- cd boost-root
- git submodule init libs/array
- git submodule init libs/assert
- 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
- git submodule init libs/function
- git submodule init libs/function_types
- git submodule init libs/functional
- git submodule init libs/integer
- git submodule init libs/iterator
- git submodule init libs/lambda
- git submodule init libs/move
- git submodule init libs/mpl
- git submodule init libs/optional
- git submodule init libs/predef
- git submodule init libs/preprocessor
- git submodule init libs/smart_ptr
- git submodule init libs/static_assert
- git submodule init libs/throw_exception
- git submodule init libs/tuple
- git submodule init libs/type_index
- git submodule init libs/type_traits
- git submodule init libs/typeof
- git submodule init libs/utility
- 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
- b2 headers
build: off
test_script:
- if not "%ADDRMD%" == "" set ADDRMD=address-model=%ADDRMD%
- b2 -j%NUMBER_OF_PROCESSORS% --hash libs/fusion/test toolset=%TOOLSET% cxxstd=%CXXSTD% %ADDRMD%

View File

@ -25,4 +25,8 @@ boostbook quickbook
<format>pdf:<xsl:param>img.src.path=$(images_location)/
;
###############################################################################
alias boostdoc ;
explicit boostdoc ;
alias boostrelease : quickbook ;
explicit boostrelease ;

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
@ -89,6 +76,35 @@ __std_pair_doc__, __tr1_tuple_pair__
[endsect]
[section std::tuple]
This module provides adapters for `std::tuple`. Including the module header
makes `std::tuple` a fully conforming __random_access_sequence__.
[important To be fully conforming, compiler should support C++11 Variadic Templates.]
[heading Header]
#include <boost/fusion/adapted/std_tuple.hpp>
#include <boost/fusion/include/std_tuple.hpp>
[heading Model of]
* __random_access_sequence__
[heading Example]
std::tuple<int, std::string, float> p(123, "Hola!!!", 456.f);
std::cout << __at_c__<0>(p) << std::endl;
std::cout << __at_c__<1>(p) << std::endl;
std::cout << p << std::endl;
[heading See also]
__std_tuple_doc__
[endsect]
[section mpl sequence]
This module provides adapters for __mpl__ sequences. Including the module
@ -116,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__
@ -168,8 +199,8 @@ header makes `boost::tuple` a fully conforming __forward_sequence__.
[heading Example]
boost::tuple<int,std::string> example_tuple(101, "hello");
std::cout << *boost::fusion::begin(example_tuple) << '\n';
std::cout << *boost::fusion::next(boost::fusion::begin(example_tuple)) << '\n';
std::cout << *__begin__(example_tuple) << '\n';
std::cout << *__next__(__begin__(example_tuple)) << '\n';
[heading See also]
@ -185,10 +216,20 @@ necessary boilerplate to make an arbitrary struct a model of
__random_access_sequence__.
[heading Synopsis]
BOOST_FUSION_ADAPT_STRUCT(
struct_name,
member_name0,
member_name1,
member_name2,
...
)
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_STRUCT(
struct_name,
(member_type0, member_name0)
(member_type1, member_name1)
(auto, member_name2)
...
)
@ -196,9 +237,13 @@ __random_access_sequence__.
The above macro generates the necessary code to adapt `struct_name`
as a model of __random_access_sequence__.
The sequence of `(member_typeN, member_nameN)`
pairs declares the type and names of each of the struct members that are
part of the sequence.
The sequence of `member_nameN,` arguments or `(member_typeN, member_nameN)`
pairs declares the type and names of each of the struct members that are part of
the sequence.
When member_typeN is omitted or set to auto, the type is
infered with Boost.TypeOf.
The macro should be used at global scope, and `struct_name` should be the fully
namespace qualified name of the struct to be adapted.
@ -208,7 +253,7 @@ namespace qualified name of the struct to be adapted.
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
[heading Example]
[heading Example: BOOST_FUSION_ADAPT_STRUCT ]
namespace demo
{
struct employee
@ -221,8 +266,15 @@ namespace qualified name of the struct to be adapted.
// demo::employee is now a Fusion sequence
BOOST_FUSION_ADAPT_STRUCT(
demo::employee,
(std::string, name)
(int, age))
name,
age)
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_STRUCT(
demo::employee,
(auto, name)
(auto, age)
)
[endsect]
@ -234,11 +286,21 @@ necessary boilerplate to make an arbitrary template struct a model of
__random_access_sequence__.
[heading Synopsis]
BOOST_FUSION_ADAPT_TPL_STRUCT(
(template_param0)(template_param1)...,
(struct_name) (specialization_param0)(specialization_param1)...,
member_name0,
member_name1
...
)
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_TPL_STRUCT(
(template_param0)(template_param1)...,
(struct_name) (specialization_param0)(specialization_param1)...,
(member_type0, member_name0)
(member_type1, member_name1)
(auto, member_name2),
...
)
@ -252,9 +314,12 @@ the template type parameters used.
The sequence `(specialization_param0)(specialization_param1)...`
declares the template parameters of the actual specialization of `struct_name`
that is adapted as a fusion sequence.
The sequence of `(member_typeN, member_nameN)`
pairs declares the type and names of each of the struct members that are
part of the sequence.
The sequence of `member_nameN,` arguments or `(member_typeN, member_nameN)`
pairs declares the type and names of each of the struct members that are part of
the sequence.
When member_typeN is omitted or set to auto, the type is
infered with Boost.TypeOf.
The macro should be used at global scope, and `struct_name` should be the fully
namespace qualified name of the struct to be adapted.
@ -272,6 +337,7 @@ namespace qualified name of the struct to be adapted.
{
Name name;
Age age;
int employment_timestamp;
};
}
@ -280,7 +346,16 @@ namespace qualified name of the struct to be adapted.
(Name)(Age),
(demo::employee) (Name)(Age),
(Name, name)
(Age, age))
(Age, age)
(auto, employment_timestamp))
// Or by infering type completely
BOOST_FUSION_ADAPT_TPL_STRUCT(
(Name)(Age),
(demo::employee) (Name)(Age),
name,
age,
employment_timestamp)
[endsect]
@ -293,10 +368,31 @@ arbitrary struct a model of __random_access_sequence__. The given struct is
adapted using the given name.
[heading Synopsis]
BOOST_FUSION_ADAPT_STRUCT_NAMED(
struct_name, adapted_name,
member_name0,
member_name1,
member_name2,
...
)
BOOST_FUSION_ADAPT_STRUCT_NAMED_NS(
struct_name,
(namespace0)(namespace1)...,
adapted_name,
member_name0,
member_name1,
member_name2,
...
)
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_STRUCT_NAMED(
struct_name, adapted_name,
(member_type0, member_name0)
(member_type1, member_name1)
(auto, member_name2),
...
)
@ -306,9 +402,12 @@ adapted using the given name.
adapted_name,
(member_type0, member_name0)
(member_type1, member_name1)
(auto, member_name2),
...
)
[heading Semantics]
The above macros generate the necessary code to adapt `struct_name`
@ -321,9 +420,12 @@ If an empty namespace sequence is given (that is a macro that expands to
nothing), the adapted view is placed in the global namespace.
If no namespace sequence is given (i.e. `BOOST_FUSION_ADAPT_STRUCT_NAMED`), the
adapted view is placed in the namespace `boost::fusion::adapted`.
The sequence of `(member_typeN, member_nameN)`
pairs declares the type and names of each of the struct members that are
part of the sequence.
The sequence of `member_nameN,` arguments or `(member_typeN, member_nameN)`
pairs declares the type and names of each of the struct members that are part of
the sequence.
When member_typeN is omitted or set to auto, the type is
infered with Boost.TypeOf.
The macros should be used at global scope, and `struct_name` should be the fully
namespace qualified name of the struct to be converted.
@ -347,8 +449,14 @@ namespace qualified name of the struct to be converted.
// referring to demo::employee
BOOST_FUSION_ADAPT_STRUCT_NAMED(
demo::employee, adapted_employee,
(std::string, name)
(int, age))
name,
age)
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_STRUCT_NAMED(
demo::employee, adapted_employee,
(auto, name),
(auto, age))
[endsect]
@ -362,8 +470,8 @@ __random_access_sequence__ and __associative_sequence__.
[heading Synopsis]
BOOST_FUSION_ADAPT_ASSOC_STRUCT(
struct_name,
(member_type0, member_name0, key_type0)
(member_type1, member_name1, key_type1)
([member_type0,] member_name0, key_type0)
([member_type1,] member_name1, key_type1)
...
)
@ -371,10 +479,13 @@ __random_access_sequence__ and __associative_sequence__.
The above macro generates the necessary code to adapt `struct_name`
as a model of __random_access_sequence__ and __associative_sequence__.
The sequence of `(member_typeN, member_nameN, key_typeN)`
triples declares the type, name and key type of each of the struct members
The sequence of `([member_typeN,] member_nameN, key_typeN)` tuples
declares the type, name and key type of each of the struct members
that are part of the sequence.
When member_typeN is omitted or set to auto, the type is
infered with Boost.TypeOf.
The macro should be used at global scope, and `struct_name` should be the fully
namespace qualified name of the struct to be adapted.
@ -404,8 +515,14 @@ namespace qualified name of the struct to be adapted.
// keys keys::name and keys::age present.
BOOST_FUSION_ADAPT_ASSOC_STRUCT(
demo::employee,
(std::string, name, keys::name)
(int, age, keys::age))
(name, keys::name)
(age, keys::age))
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_ASSOC_STRUCT(
demo::employee,
(auto, name, keys::name),
(auto, age, keys::name))
[endsect]
@ -420,8 +537,8 @@ __random_access_sequence__ and __associative_sequence__.
BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT(
(template_param0)(template_param1)...,
(struct_name) (specialization_param0)(specialization_param1)...,
(member_type0, member_name0, key_type0)
(member_type1, member_name1, key_type1)
([member_type0,] member_name0, key_type0)
([member_type1,] member_name1, key_type1)
...
)
@ -435,10 +552,13 @@ the template type parameters used.
The sequence `(specialization_param0)(specialization_param1)...`
declares the template parameters of the actual specialization of `struct_name`
that is adapted as a fusion sequence.
The sequence of `(member_typeN, member_nameN, key_typeN)`
triples declares the type, name and key type of each of the struct members
The sequence of `([member_typeN,] member_nameN, key_typeN)`
tuples declares the type, name and key type of each of the struct members
that are part of the sequence.
When member_typeN is omitted or set to auto, the type is
infered with Boost.TypeOf.
The macro should be used at global scope, and `struct_name` should be the fully
namespace qualified name of the struct to be adapted.
@ -467,6 +587,13 @@ namespace qualified name of the struct to be adapted.
// Any instantiated demo::employee is now a Fusion sequence.
// It is also an associative sequence with
// keys keys::name and keys::age present.
BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT(
(Name)(Age),
(demo::employee) (Name)(Age),
(name, keys::name)
(age, keys::age))
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT(
(Name)(Age),
(demo::employee) (Name)(Age),
@ -486,8 +613,8 @@ __associative_sequence__. The given struct is adapted using the given name.
[heading Synopsis]
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(
struct_name, adapted_name,
(member_type0, member_name0, key_type0)
(member_type1, member_name1, key_type1)
([member_type0,] member_name0, key_type0)
([member_type1,] member_name1, key_type1)
...
)
@ -495,8 +622,8 @@ __associative_sequence__. The given struct is adapted using the given name.
struct_name,
(namespace0)(namespace1)...,
adapted_name,
(member_type0, member_name0, key_type0)
(member_type1, member_name1, key_type1)
([member_type0,] member_name0, key_type0)
([member_type1,] member_name1, key_type1)
...
)
@ -516,6 +643,9 @@ The sequence of `(member_typeN, member_nameN, key_typeN)`
triples declares the type, name and key type of each of the struct members
that are part of the sequence.
When member_typeN is omitted or set to auto, the type is
infered with Boost.TypeOf.
The macros should be used at global scope, and `struct_name` should be the fully
namespace qualified name of the struct to be converted.
@ -544,8 +674,14 @@ namespace qualified name of the struct to be converted.
// referring to demo::employee
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(
demo::employee, adapted_employee,
(std::string, name, keys::name)
(int, age, keys::age))
(name, keys::name)
(age, keys::age))
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(
demo::employee, adapted_employee,
(auto, name, keys::name)
(auto, age, keys::age))
[endsect]
@ -559,8 +695,8 @@ __random_access_sequence__.
BOOST_FUSION_ADAPT_ADT(
type_name,
(attribute_type0, attribute_const_type0, get_expr0, set_expr0)
(attribute_type1, attribute_const_type1, get_expr1, set_expr1)
([attribute_type0, attribute_const_type0,] get_expr0, set_expr0)
([attribute_type1, attribute_const_type1,] get_expr1, set_expr1)
...
)
@ -569,7 +705,7 @@ __random_access_sequence__.
The above macro generates the necessary code to adapt `type_name`
as a model of __random_access_sequence__.
The sequence of
[^(attribute_type['N], attribute_const_type['N], get_expr['N], set_expr['N])]
[^([attribute_type['N], attribute_const_type['N],] get_expr['N], set_expr['N])]
quadruples declares the types, const types, get-expressions and set-expressions
of the elements that are part of the adapted fusion sequence.
[^get_expr['N]] is the expression that is invoked to get the ['N]th element
@ -577,7 +713,9 @@ of an instance of `type_name`. This expression may access a variable named
`obj` of type `type_name&` or `type_name const&` which represents the underlying
instance of `type_name`.
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
that [^get_expr['N]] denotes to.
that [^get_expr['N]] denotes to, when omitted the type is deduced from
[get_expr['N]] return type via BOOST_TYPEOF. On compiler missing support for
variadic macros auto can be used to avoid repeating the type.
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
of an instance of `type_name`. This expression may access variables named
`obj` of type `type_name&`, which represent the corresponding instance of
@ -635,8 +773,8 @@ namespace qualified name of the class type to be adapted.
BOOST_FUSION_ADAPT_ADT(
demo::employee,
(std::string const&, std::string const&, obj.get_name(), obj.set_name(val))
(int, int, obj.get_age(), obj.set_age(val)))
(obj.get_name(), obj.set_name(val))
(obj.get_age(), obj.set_age(val)))
demo::employee e;
front(e)="Edward Norton";
@ -658,11 +796,11 @@ __random_access_sequence__.
[heading Synopsis]
BOOST_FUSION_ADAPT_ADT(
BOOST_FUSION_ADAPT_TPL_ADT(
(template_param0)(template_param1)...,
(type_name) (specialization_param0)(specialization_param1)...,
(attribute_type0, attribute_const_type0, get_expr0, set_expr0)
(attribute_type1, attribute_const_type1, get_expr1, set_expr1)
([attribute_type0, attribute_const_type0,] get_expr0, set_expr0)
([attribute_type1, attribute_const_type1,] get_expr1, set_expr1)
...
)
@ -685,7 +823,9 @@ of an instance of `type_name`. This expression may access a variable named
`obj` of type `type_name&` or `type_name const&` which represents the underlying
instance of `type_name`.
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
that [^get_expr['N]] denotes to.
that [^get_expr['N]] denotes to, when omitted the type is deduced from
[get_expr['N]] return type via BOOST_TYPEOF. On compiler missing support for
variadic macros auto can be used to avoid repeating the type.
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
of an instance of `type_name`. This expression may access variables named
`obj` of type `type_name&`, which represent the corresponding instance of
@ -770,8 +910,8 @@ __random_access_sequence__ and __associative_sequence__.
BOOST_FUSION_ADAPT_ASSOC_ADT(
type_name,
(attribute_type0, attribute_const_type0, get_expr0, set_expr0, key_type0)
(attribute_type1, attribute_const_type1, get_expr1, set_expr1, key_type1)
([attribute_type0, attribute_const_type0,] get_expr0, set_expr0, key_type0)
([attribute_type1, attribute_const_type1,] get_expr1, set_expr1, key_type1)
...
)
@ -788,7 +928,9 @@ of an instance of `type_name`. This expression may access a variable named
`obj` of type `type_name&` or `type_name const&` which represents the underlying
instance of `type_name`.
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
that [^get_expr['N]] denotes to.
that [^get_expr['N]] denotes to, when omitted the type is deduced from
[get_expr['N]] return type via BOOST_TYPEOF. On compiler missing support for
variadic macros auto can be used to avoid repeating the type.
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
of an instance of `type_name`. This expression may access variables named
`obj` of type `type_name&`, which represent the corresponding instance of
@ -852,8 +994,8 @@ namespace qualified name of the class type to be adapted.
BOOST_FUSION_ADAPT_ASSOC_ADT(
demo::employee,
(std::string const&, std::string const&, obj.get_name(), obj.set_name(val), keys::name)
(int, int, obj.get_age(), obj.set_age(val), keys::age))
(obj.get_name(), obj.set_name(val), keys::name)
(obj.get_age(), obj.set_age(val), keys::age))
demo::employee e;
at_key<keys::name>(e)="Edward Norton";
@ -878,8 +1020,8 @@ __random_access_sequence__ and __associative_sequence__.
BOOST_FUSION_ADAPT_ASSOC_TPL_ADT(
(template_param0)(template_param1)...,
(type_name) (specialization_param0)(specialization_param1)...,
(attribute_type0, attribute_const_type0, get_expr0, set_expr0, key_type0)
(attribute_type1, attribute_const_type1, get_expr1, set_expr1, key_type1)
([attribute_type0, attribute_const_type0,] get_expr0, set_expr0, key_type0)
([attribute_type1, attribute_const_type1,] get_expr1, set_expr1, key_type1)
...
)
@ -894,7 +1036,7 @@ The sequence `(specialization_param0)(specialization_param1)...`
declares the template parameters of the actual specialization of `type_name`
that is adapted as a fusion sequence.
The sequence of
[^(attribute_type['N], attribute_const_type['N], get_expr['N], set_expr['N], key_type['N])]
[^([attribute_type['N], attribute_const_type['N],] get_expr['N], set_expr['N], key_type['N])]
5-tuples declares the types, const types, get-expressions, set-expressions and key types
of the elements that are part of the adapted fusion sequence.
[^get_expr['N]] is the expression that is invoked to get the ['N]th element
@ -902,7 +1044,9 @@ of an instance of `type_name`. This expression may access a variable named
`obj` of type `type_name&` or `type_name const&` which represents the underlying
instance of `type_name`.
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
that [^get_expr['N]] denotes to.
that [^get_expr['N]] denotes to, when omitted the type is deduced from
[get_expr['N]] return type via BOOST_TYPEOF. On compiler missing support for
variadic macros auto can be used to avoid repeating the type.
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
of an instance of `type_name`. This expression may access variables named
`obj` of type `type_name&`, which represent the corresponding instance of
@ -1115,6 +1259,100 @@ defined in __random_access_sequence__.
[endsect]
[section:define_struct_inline BOOST_FUSION_DEFINE_STRUCT_INLINE]
[heading Description]
BOOST_FUSION_DEFINE_STRUCT_INLINE is a macro that can be used to generate all
the necessary boilerplate to define and adapt an arbitrary struct as a model of
__random_access_sequence__. Unlike BOOST_FUSION_DEFINE_STRUCT, it can be used
at class or namespace scope.
[heading Synopsis]
BOOST_FUSION_DEFINE_STRUCT_INLINE(
struct_name,
(member_type0, member_name0)
(member_type1, member_name1)
...
)
[heading Expression Semantics]
The semantics of BOOST_FUSION_DEFINE_STRUCT_INLINE are identical to those of
BOOST_FUSION_DEFINE_STRUCT, with two differences:
# BOOST_FUSION_DEFINE_STRUCT_INLINE can be used at class or namespace scope, and
thus does not take a namespace list parameter.
# The structure generated by BOOST_FUSION_DEFINE_STRUCT_INLINE has a base class,
and is thus not POD in C++03.
[heading Header]
#include <boost/fusion/adapted/struct/define_struct_inline.hpp>
#include <boost/fusion/include/define_struct_inline.hpp>
[heading Example]
// enclosing::employee is a Fusion sequence
class enclosing
{
BOOST_FUSION_DEFINE_STRUCT_INLINE(
employee,
(std::string, name)
(int, age))
};
[endsect]
[section:define_tpl_struct_inline BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE]
[heading Description]
BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE is a macro that can be used to generate
all the necessary boilerplate to define and adapt an arbitrary template struct
as a model of __random_access_sequence__. Unlike BOOST_FUSION_DEFINE_TPL_STRUCT,
it can be used at class or namespace scope.
[heading Synopsis]
BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE(
(template_param0)(template_param1)...,
struct_name,
(member_type0, member_name0)
(member_type1, member_name1)
...
)
[heading Expression Semantics]
The semantics of BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE are identical to those of
BOOST_FUSION_DEFINE_TPL_STRUCT, with two differences:
# BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE can be used at class or namespace scope,
and thus does not take a namespace list parameter.
# The structure generated by BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE has a base
class, and is thus not POD in C++03.
[heading Header]
#include <boost/fusion/adapted/struct/define_struct_inline.hpp>
#include <boost/fusion/include/define_struct_inline.hpp>
[heading Example]
// Any instantiated enclosing::employee is a Fusion sequence
class enclosing
{
BOOST_FUSION_DEFINE_TPL_STRUCT(
(Name)(Age), employee,
(Name, name)
(Age, age))
};
[endsect]
[section:define_assoc_struct BOOST_FUSION_DEFINE_ASSOC_STRUCT]
[heading Description]

View File

@ -69,7 +69,7 @@ It is also used to convert sequence into other.
[heading Synopsis]
template <typename Seq1, typename Seq2>
void copy(Seq1 const& src, Seq2& dest);
typename __result_of_copy__<Seq1, Seq2>::type copy(Seq1 const& src, Seq2& dest);
[table Parameters
[[Parameter][Requirement][Description]]
@ -100,6 +100,121 @@ Linear, exactly `__result_of_size__<Sequence>::value`.
[endsect]
[section move]
[heading Description]
move a sequence `src` to a sequence `dest`.
It is also used to convert sequence into other.
[heading Synopsis]
template <typename Seq1, typename Seq2>
typename __result_of_move__<Seq1, Seq2>::type move(Seq1&& src, Seq2& dest);
[table Parameters
[[Parameter][Requirement][Description]]
[[`src`][A model of __forward_sequence__, all elements contained in the `src` sequence should be convertible into the element contained in the `dest` sequence.][Operation's argument]]
[[`dest`][A model of __forward_sequence__, `e2 = std::move(e1)` is valid expression for each pair of elements `e1` of `src` and `e2` of `dest`.][Operation's argument]]
]
[heading Expression Semantics]
__move__(src, dest);
[*Return type]: `void`
[*Semantics]: `e2 = std::move(e1)` for each element `e1` in `src` and `e2` in `dest`.
[heading Complexity]
Linear, exactly `__result_of_size__<Sequence>::value`.
[heading Header]
#include <boost/fusion/algorithm/auxiliary/move.hpp>
#include <boost/fusion/include/move.hpp>
[heading Example]
__vector__<int,int> vec(1,2);
__list__<int,int> ls;
__move__(std::move(vec), ls);
assert(ls == __make_list__(1,2));
[endsect]
[endsect]
[section Metafunctions]
[section copy]
[heading Description]
A metafunction returning the result type of applying __copy__, which is always `void`.
[heading Synopsis]
template <typename Seq1, typename Seq2>
struct copy
{
typedef void type;
};
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq1`] [A model of __forward_sequence__] [Operation's argument]]
[[`Seq2`] [A model of __forward_sequence__] [Operation's argument]]
]
[heading Expression Semantics]
result_of::copy<Seq1, Seq2>::type
[*Return type]: `void` iff both of `Seq1` and `Seq2` are sequence.
Otherwise, none.
[*Semantics]: Returns the return type of __copy__ for 2 sequences of types `Seq1` and `Seq2`.
[heading Complexity]
Constant.
[heading Header]
#include <boost/fusion/algorithm/auxiliary/copy.hpp>
#include <boost/fusion/include/copy.hpp>
[endsect]
[section move]
[heading Description]
A metafunction returning the result type of applying __move__, which is always `void`.
[heading Synopsis]
template <typename Seq1, typename Seq2>
struct move
{
typedef void type;
};
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq1`] [A model of __forward_sequence__] [Operation's argument]]
[[`Seq2`] [A model of __forward_sequence__] [Operation's argument]]
]
[heading Expression Semantics]
result_of::move<Seq1, Seq2>::type
[*Return type]: `void` iff both of `Seq1` and `Seq2` are sequence.
Otherwise, none.
[*Semantics]: Returns the return type of __move__ for 2 sequences of types `Seq1` and `Seq2`.
[heading Complexity]
Constant.
[heading Header]
#include <boost/fusion/algorithm/auxiliary/move.hpp>
#include <boost/fusion/include/move.hpp>
[endsect]
[endsect]
[endsect]
@ -143,6 +258,22 @@ the first call) and [arg_desc] of `seq`.
typename result_of_name_macro<Sequence const, State const, F>::type name_macro(
Sequence const& seq, State const& initial_state, F f);
template<
typename Sequence,
typename State,
typename F
>
typename result_of_name_macro<Sequence, State, F>::type name_macro(
Sequence& seq, State& initial_state, F f);
template<
typename Sequence,
typename State,
typename F
>
typename result_of_name_macro<Sequence const, State, F>::type name_macro(
Sequence const& seq, State& initial_state, F f);
[def seq_concept_macro [seq_concept]]
[def arg_type_id_macro [arg_type_id]]
[def arg_id_macro [arg_id]]
@ -326,10 +457,10 @@ Linear, exactly `__result_of_size__<Sequence>::value` applications of `F`.
[endsect]
[section for_each]
A metafunction returning the result type of applying __for_each__ to a sequence. The
return type of __for_each__ is always `void`.
[heading Description]
A metafunction returning the result type of applying __for_each__ to a sequence. The
return type of __for_each__ is always `void`.
[heading Synopsis]
template<
@ -536,13 +667,13 @@ Finds the first element of a given type within a sequence.
typename T,
typename Sequence
>
__unspecified__ find(Sequence const& seq);
typename __result_of_find__<Sequence const, T>::type find(Sequence const& seq);
template<
typename T,
typename Sequence
>
__unspecified__ find(Sequence& seq);
typename __result_of_find__<Sequence, T>::type find(Sequence& seq);
[table Parameters
[[Parameter][Requirement][Description]]
@ -574,23 +705,23 @@ Linear. At most `__result_of_size__<Sequence>::value` comparisons.
[endsect]
[section find_if]
Finds the first element within a sequence with a type for which a given __mpl_lambda_expression__ evaluates to
`boost::mpl::true_`.
[heading Description]
Finds the first element within a sequence with a type for which a given __mpl_lambda_expression__ evaluates to
`boost::mpl::true_`.
[heading Synopsis]
template<
typename F,
typename Sequence
>
__unspecified__ find_if(Sequence const& seq);
typename __result_of_find_if__<Sequence const, F>::type find_if(Sequence const& seq);
template<
typename F,
typename Sequence
>
__unspecified__ find_if(Sequence& seq);
typename __result_of_find_if__<Sequence, F>::type find_if(Sequence& seq);
[table Parameters
[[Parameter][Requirement][Description]]
@ -609,8 +740,10 @@ or `__end__(seq)` if there is no such element.
[heading Complexity]
Linear. At most `__result_of_size__<Sequence>::value` comparisons.
#include <boost/fusion/algorithm/query/find_if.hpp>
#include <boost/fusion/include/find_if.hpp>
[heading Header]
#include <boost/fusion/algorithm/query/find_if.hpp>
#include <boost/fusion/include/find_if.hpp>
[heading Example]
const __vector__<double,int> vec(1.0,2);
@ -1246,7 +1379,7 @@ Returns a new sequence, with all the elements of the original sequence, except t
typename T,
typename Sequence
>
typename __result_of_remove__<Sequence const, T>::type replace(Sequence const& seq);
typename __result_of_remove__<Sequence const, T>::type remove(Sequence const& seq);
[table Parameters
[[Parameter][Requirement][Description]]
@ -1329,7 +1462,7 @@ Constant. Returns a view which is lazily evaluated.
[heading Description]
Returns a new sequence with the elements of the original in reverse order.
[heading Synposis]
[heading Synopsis]
template<
typename Sequence
>
@ -1369,7 +1502,7 @@ Constant. Returns a view which is lazily evaluated.
[heading Description]
__clear__ returns an empty sequence.
[heading Synposis]
[heading Synopsis]
template<
typename Sequence
>
@ -1406,7 +1539,7 @@ Constant.
Returns a new sequence, containing all the elements of the original except those at a specified iterator, or
between two iterators.
[heading Synposis]
[heading Synopsis]
template<
typename Sequence,
typename First
@ -1467,11 +1600,11 @@ Constant. Returns a view which is lazily evaluated.
[section erase_key]
[heading Description]
For an [link fusion.sequence.concepts.associative_sequence associative]] __forward_sequence__ `seq`,
returns a [link fusion.sequence.concepts.associative_sequence associative]] __forward_sequence__ containing
For an [link fusion.sequence.concepts.associative_sequence associative] __forward_sequence__ `seq`,
returns a [link fusion.sequence.concepts.associative_sequence associative] __forward_sequence__ containing
all the elements of the original except those with a given key.
[heading Synposis]
[heading Synopsis]
template<
typename Key,
typename Sequence
@ -1510,7 +1643,7 @@ Constant. Returns a view which is lazily evaluated.
Returns a new sequence with all the elements of the original, an a new element inserted the
position described by a given iterator.
[heading Synposis]
[heading Synopsis]
template<
typename Sequence,
typename Pos,
@ -1527,7 +1660,7 @@ position described by a given iterator.
]
[heading Expression Semantics]
__insert__(seq, p, t);
__insert__(seq, pos, t);
[*Return type]:
@ -1555,7 +1688,7 @@ Constant. Returns a view which is lazily evaluated.
[heading Description]
Returns a new sequence with another sequence inserted at a specified iterator.
[heading Synposis]
[heading Synopsis]
template<
typename Sequence,
typename Pos,
@ -1580,7 +1713,7 @@ Returns a new sequence with another sequence inserted at a specified iterator.
* A model of __associative_sequence__ if `seq` implements the __associative_sequence__ model.
[*Semantics]: Returns a new sequence, containing all the elements of `seq`, and the elements of
`range` inserted at iterator `pos`. All elements retaining their ordering from the orignal sequences.
`range` inserted at iterator `pos`. All elements retaining their ordering from the original sequences.
[heading Complexity]
Constant. Returns a view which is lazily evaluated.
@ -1605,7 +1738,7 @@ Takes 2 sequences and returns a sequence containing the elements of the first fo
template<
typename LhSequence,
typename RhSequence>
typename __result_of_join__<LhSequence, RhSequence>::type join(LhSequence const& lhs, RhSequence const& rhs);
typename __result_of_join__<LhSequence const, RhSequence const>::type join(LhSequence const& lhs, RhSequence const& rhs);
[table Parameters
[[Parameter][Requirement][Description]]
@ -1641,7 +1774,7 @@ Constant. Returns a view which is lazily evaluated.
[section zip]
[heading Description]
Zips sequences together to form a single sequence, whos members are tuples of the members of the component sequences.
Zips sequences together to form a single sequence, whose members are tuples of the members of the component sequences.
[heading Synopsis]
template<
@ -1650,7 +1783,7 @@ Zips sequences together to form a single sequence, whos members are tuples of th
...
typename SequenceN
>
typename __result_of_zip__<Sequence1, Sequence2, ... SequenceN>::type
typename __result_of_zip__<Sequence1 const, Sequence2 const, ... SequenceN const>::type
zip(Sequence1 const& seq1, Sequence2 const& seq2, ... SequenceN const& seqN);
[table Parameters
@ -1715,7 +1848,7 @@ Constant. Returns a view which is lazily evaluated.
#include <boost/fusion/include/pop_back.hpp>
[heading Example]
assert(___pop_back__(__make_vector__(1,2,3)) == __make_vector__(1,2));
assert(__pop_back__(__make_vector__(1,2,3)) == __make_vector__(1,2));
[endsect]
@ -1769,7 +1902,7 @@ Returns a new sequence with an element added at the end.
typename Sequence,
typename T
>
typename __result_of_push_back__<Sequence, T>::type push_back(
typename __result_of_push_back__<Sequence const, T>::type push_back(
Sequence const& seq, T const& t);
[table Parameters
@ -1810,7 +1943,7 @@ Returns a new sequence with an element added at the beginning.
typename Sequence,
typename T
>
typename __result_of_push_front__<Sequence, T>::type push_front(
typename __result_of_push_front__<Sequence const, T>::type push_front(
Sequence const& seq, T const& t);
[table Parameters
@ -1841,6 +1974,50 @@ Constant. Returns a view which is lazily evaluated.
[endsect]
[section flatten]
[heading Description]
Returns a new sequence without nested sequences.
[heading Synopsis]
template<
typename Sequence
>
typename __result_of_flatten__<Sequence>::type flatten(Sequence& seq);
template<
typename Sequence
>
typename __result_of_flatten__<Sequence const>::type flatten(Sequence const& seq);
[table Parameters
[[Parameter][Requirement][Description]]
[[`seq`][A model of __forward_sequence__][Operation's argument]]
]
[heading Expression Semantics]
__flatten__(seq);
[*Return type]:
* A model of __forward_sequence__.
[*Semantics]: Returns a new sequence containing all the leaf elements of `seq`.
[heading Complexity]
Constant. Returns a view which is lazily evaluated.
[heading Header]
#include <boost/fusion/algorithm/transformation/flatten.hpp>
#include <boost/fusion/include/flatten.hpp>
[heading Example]
const __vector__<int, int, __vector__<int, int>, int> vec(1, 2, __make_vector__(3, 4), 5);
assert(__flatten__(vec) == __make_vector__(1, 2, 3, 4, 5)));
[endsect]
[endsect]
[section Metafunctions]
@ -1930,32 +2107,33 @@ Constant.
[section transform]
[heading Description]
For a sequence `seq` and function object or function pointer `f`, `transform` returns a new sequence
with elements created by applying `f(e)` to each element of `e` of `seq`.
Returns the result type of __transform__, given the types of the input sequence and unary __poly_func_obj__.
[heading Unary version synopsis]
template<
typename Sequence,
typename F
>
typename __result_of_transform__<Sequence const, F>::type transform(
Sequence const& seq, F f);
struct transform
{
typedef __unspecified__ type;
};
[table Parameters
[[Parameter][Requirement][Description]]
[[`seq`][A model of __forward_sequence__][Operation's argument]]
[[`f`][`f(e)` is a valid expression for each element `e` of `seq`. `__boost_result_of_call__<F(E)>::type` is the return type of `f` when called with a value of each element type `E`.][Transformation function]]
[[`Sequence`][A model of __forward_sequence__][Operation's argument]]
[[`F`][A model of unary __poly_func_obj__][Transformation metafunction]]
]
[heading Expression Semantics]
__transform__(seq, f);
__result_of_transform__<Sequence, F>::type
[*Return type]:
* A model of __forward_sequence__
* A model of __associative_sequence__ if `Sequence` implements the __associative_sequence__ model.
[*Semantics]: Returns a new sequence, containing the return values of `f(e)` for each element `e` within `seq`.
[*Semantics]: Returns a sequence that contains the types of `__result_of__<F(E)>::type` for each element `E` within `Sequence`.
[heading Binary version synopsis]
template<
@ -1963,41 +2141,33 @@ with elements created by applying `f(e)` to each element of `e` of `seq`.
typename Sequence2,
typename F
>
typename __result_of_transform__<Sequence1 const, Sequence2 const, F>::type transform(
Sequence1 const& seq1, Sequence2 const& seq2, F f);
struct transform
{
typedef __unspecified__ type;
};
[table Parameters
[[Parameter][Requirement][Description]]
[[`seq1`][A model of __forward_sequence__][Operation's argument]]
[[`seq2`][A model of __forward_sequence__][Operation's argument]]
[[`f`][`f(e1,e2)` is a valid expression for each pair of elements `e1` of `seq1` and `e2` of `seq2`. `__boost_result_of_call__<F(E1,E2)>::type` is the return type of `f` when called with elements of type `E1` and `E2`][Transformation function]]
[[`Sequence1`][A model of __forward_sequence__][Operation's argument]]
[[`Sequence2`][A model of __forward_sequence__][Operation's argument]]
[[`F`][A model of binary __poly_func_obj__][Transformation metafunction]]
]
[heading Expression Semantics]
__result_of_transform__<Sequence1, Sequence2, F>::type
[*Return type]: A model of __forward_sequence__.
[*Semantics]: Returns a new sequence, containing the return values of `f(e1, e2)` for each pair of elements `e1` and `e2` within `seq1` and `seq2` respectively.
[*Semantics]: Returns a sequence, that contains the types of `__result_of__<F(E1, E2)>::type` for each pair of elements `E1` and `E2` within `Sequence1` and `Sequence2` respectively.
[heading Complexity]
Constant. Returns a view which is lazily evaluated.
Constant.
[heading Header]
#include <boost/fusion/algorithm/transformation/transform.hpp>
#include <boost/fusion/include/transform.hpp>
[heading Example]
struct triple
{
typedef int result_type;
int operator()(int t) const
{
return t * 3;
};
};
...
assert(__transform__(__make_vector__(1,2,3), triple()) == __make_vector__(3,6,9));
[endsect]
[section replace]
@ -2041,7 +2211,7 @@ Constant.
[section replace_if]
[heading Description]
Returns the result type of __replace_if__, given the types of the sequence, __poly_func_obj__ predicate and replacement object.
Returns the result type of __replace_if__, given the types of the sequence, unary __mpl_lambda_expression__ predicate and replacement object.
[heading Synopsis]
template<
@ -2056,7 +2226,7 @@ Returns the result type of __replace_if__, given the types of the sequence, __po
[table Parameters
[[Parameter][Requirement][Description]]
[[`Sequence`][A model of __forward_sequence__][Operation's argument]]
[[`F`][A model of unary __poly_func_obj__][Replacement predicate]]
[[`F`][A model of unary __mpl_lambda_expression__][Replacement predicate]]
[[`T`][Any type][The type of the replacement object]]
]
@ -2106,7 +2276,7 @@ Returns the result type of __remove__, given the sequence and removal types.
* A model of __forward_sequence__.
* A model of __associative_sequence__ if `Sequence` implements the __associative_sequence__ model.
[*Semantics]: Returns a sequence containing the elements of `Sequence` not of type `T`. Equivalent to `__result_of_replace_if__<Sequence, boost::is_same<mpl::_, T> >::type`.
[*Semantics]: Returns a sequence containing the elements of `Sequence` not of type `T`. Equivalent to `__result_of_remove_if__<Sequence, boost::is_same<mpl::_, T> >::type`.
[heading Complexity]
Constant.
@ -2427,7 +2597,7 @@ Returns the result of joining 2 sequences, given the sequence types.
[*Return type]:
* A model of __forward_sequence__.
* A model of __associative_sequence__ if `LhSequence` amd `RhSequence` implement the __associative_sequence__ model.
* A model of __associative_sequence__ if `LhSequence` and `RhSequence` implement the __associative_sequence__ model.
[*Semantics]: Returns a sequence containing the elements of `LhSequence` followed by the elements of `RhSequence`. The order of the elements in the 2 sequences is preserved.
@ -2444,7 +2614,7 @@ Constant.
[section zip]
[heading Description]
Zips sequences together to form a single sequence, whos members are tuples of the members of the component sequences.
Zips sequences together to form a single sequence, whose members are tuples of the members of the component sequences.
[heading Synopsis]
template<
@ -2633,6 +2803,44 @@ Constant.
[endsect]
[section flatten]
[heading Description]
Returns the result type of __flatten__, given the input sequence type.
[heading Synopsis]
template<
typename Sequence
>
struct flatten
{
typedef __unspecified__ type;
};
[table Parameters
[[Parameter][Requirement][Description]]
[[`Sequence`][A model of __forward_sequence__][Operation's argument]]
]
[heading Expression Semantics]
__result_of_flatten__<Sequence>::type
[*Return type]:
* A model of __forward_sequence__.
[*Semantics]: Returns a sequence with all the leaf elements of `Sequence`.
[heading Complexity]
Constant.
[heading Header]
#include <boost/fusion/algorithm/transformation/flatten.hpp>
#include <boost/fusion/include/flatten.hpp>
[endsect]
[endsect]
[endsect]

View File

@ -45,5 +45,8 @@ This section summarizes significant changes to the Fusion library.
compilation (Joel de Guzman)
* October 8, 2011: Added adaptor for std::tuple (Joel de Guzman)
* October 10, 2011: Made map random access (Brandon Kohn)
* April 7, 2012: Added C++11 version of deque
* May 19, 2012: Added BOOST_FUSION_DEFINE_STRUCT_INLINE by Nathan Ridge
* September 1, 2012: Added move support for deque and vector
[endsect]

File diff suppressed because it is too large Load Diff

View File

@ -71,7 +71,7 @@ tag type for operations involving our sequence. This is done by specializing
}}}
`traits::tag_of` also has a second template argument,
that can be used in conjuction with `boost::enable_if` to provide tag
that can be used in conjunction with `boost::enable_if` to provide tag
support for groups of related types. This feature is not necessary
for our sequence, but for an example see the code in:
@ -228,7 +228,7 @@ bit of metaprogramming to return `const` references if the underlying sequence
is const.
[note Although there is a fair amount of left to do to produce a fully fledged
Fusion sequence, __result_of_value_of__ and __deref__ illustrate all the signficant concepts
Fusion sequence, __result_of_value_of__ and __deref__ illustrate all the significant concepts
required. The remainder of the process is very repetitive, simply requiring
implementation of a suitable `xxxx_impl` for each feature `xxxx`.
]
@ -323,7 +323,7 @@ For our __random_access_sequence__ we will also need to implement `size_impl`,
In order for `example_struct` to serve as an associative forward sequence,
we need to adapt the traversal category of our sequence and our iterator
accordingly and enable 3 intrinsic sequence lookup features, __at_key__,
__value_at_key__ and __has_key__. We also need to enable 3 iterator lookup
__result_of_value_at_key__ and __has_key__. We also need to enable 3 iterator lookup
features, __result_of_key_of__, __result_of_value_of_data__ and __deref_data__.
To implement `at_key_impl` we need to associate the `fields::name` and `fields::age`
@ -378,7 +378,7 @@ the example code.
We've now worked through the entire process for adding a new random
access sequence and we've also enabled our type to serve as an associative
sequence. The implementation was slightly longwinded, but followed
sequence. The implementation was slightly long-winded, but followed
a simple repeating pattern.
The support for `std::pair`, __mpl__ sequences, and `boost::array` all
@ -400,7 +400,7 @@ producing a conforming Fusion sequence.
[heading Usage]
The user of __sequence_facade__ derives his sequence type from a specialization of __sequence_facade__ and passes the derived sequence type as the first template parameter. The second template parameter should be the traversal category of the sequence being implemented. The 3rd parameter should be set to `mpl::true_` if the sequence is a view.
The user must the implement the key expressions required by their sequence type.
The user must implement the key expressions required by their sequence type.
[table Parameters
[[Name][Description]]
@ -447,7 +447,7 @@ producing a conforming Fusion iterator.
[heading Usage]
The user of iterator_facade derives his iterator type from a specialization of iterator_facade and passes the derived iterator type as the first template parameter. The second template parameter should be the traversal category of the iterator being implemented.
The user must the implement the key expressions required by their iterator type.
The user must implement the key expressions required by their iterator type.
[table Parameters
[[Name][Description]]

View File

@ -364,7 +364,7 @@ implemented).
[heading Header]
#include <booost/fusion/functional/invocation/invoke_procedure.hpp>
#include <boost/fusion/functional/invocation/invoke_procedure.hpp>
[heading Example]
__vector__<int,int> v(1,2);
@ -644,7 +644,7 @@ An unary __poly_func_obj__ adapter template for __callable_obj__ target
functions. It takes a __forward_sequence__ that contains the arguments for
the target function.
The result is discared and the adapter's return type is `void`.
The result is discarded and the adapter's return type is `void`.
The type of the target function is allowed to be const qualified or a
reference. Const qualification is preserved and propagated appropriately
@ -689,7 +689,7 @@ is not implemented).
[[`R`] [A possibly const qualified __callable_obj__ type or reference type thereof]]
[[`r`] [An object convertible to `R`]]
[[`s`] [A __sequence__ of arguments that are accepted by `r`]]
[[`f`] [An instance of `fused<R>`]]
[[`f`] [An instance of `fused_procedure<R>`]]
]
[heading Expression Semantics]
@ -922,7 +922,7 @@ An n-ary __poly_func_obj__ adapter template for an unary __poly_func_obj__
target function. When called, its arguments are bundled to a
__random_access_sequence__ that is passed to the target function object.
The call operators of esulting function objects are strictly typed
The call operators of resulting function objects are strictly typed
(in other words, non-templatized) with the types from a __sequence__.
The type of the target function is allowed to be const qualified or a
@ -931,11 +931,11 @@ reference. Const qualification is preserved and propagated appropriately
the target function object is const - or, in case the target function object
is held by value, the adapter is const).
[blurb __note__ For Microsoft Visual C++ 7.1 (Visual Studio 2003) the detection
[note For Microsoft Visual C++ 7.1 (Visual Studio 2003) the detection
of the Function Object's const qualification easily causes an internal error.
Therefore the adapter is always treated as if it was const. ]
[blurb __tip__ If the type sequence passed to this template contains
[tip If the type sequence passed to this template contains
non-reference elements, the element is copied only once - the call operator's
signature is optimized automatically to avoid by-value parameters.]

View File

@ -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
@ -11,7 +12,7 @@
[quickbook 1.3]
[version 2.2]
[authors [de Guzman, Joel], [Marsden, Dan], [Schwinger, Tobias]]
[copyright 2001 2002 2003 2004 2005 2006 2011 Joel de Guzman, Dan Marsden, Tobias Schwinger]
[copyright 2001 2002 2003 2004 2005 2006 2011 2012 Joel de Guzman, Dan Marsden, Tobias Schwinger]
[purpose Statically Typed Heterogeneous Data Structures and Algorithms]
[license
Distributed under the Boost Software License, Version 1.0.
@ -20,42 +21,37 @@
]
]
[def __note__ [$images/note.png]]
[def __alert__ [$images/alert.png]]
[def __tip__ [$images/tip.png]]
[def __caution__ [$images/caution.png]]
[def __spirit__ [@http://spirit.sourceforge.net Spirit]]
[def __phoenix__ [@http://boost.org/libs/spirit/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 __tr1__tuple__ [@http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2002/n1403.pdf TR1 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://boost.org/doc/html/any.html Boost.Any]]
[def __new_iterator_concepts__ [@http://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_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/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 __std_pair_doc__ [@http://www.sgi.com/tech/stl/pair.html `std::pair`]]
[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 __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://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]]
@ -82,6 +78,7 @@
[def __bidirectional_iterator__ [link fusion.iterator.concepts.bidirectional_iterator Bidirectional Iterator]]
[def __random_access_iterator__ [link fusion.iterator.concepts.random_access_iterator Random Access Iterator]]
[def __associative_iterator__ [link fusion.iterator.concepts.associative_iterator Associative Iterator]]
[def __unbounded_iterator__ [link fusion.iterator.concepts.unbounded_iterator Unbounded Iterator]]
[def __next__ [link fusion.iterator.functions.next `next`]]
[def __prior__ [link fusion.iterator.functions.prior `prior`]]
@ -111,11 +108,15 @@
[def __bidirectional_sequence__ [link fusion.sequence.concepts.bidirectional_sequence Bidirectional Sequence]]
[def __random_access_sequence__ [link fusion.sequence.concepts.random_access_sequence Random Access Sequence]]
[def __associative_sequence__ [link fusion.sequence.concepts.associative_sequence Associative Sequence]]
[def __unbounded_sequence__ [link fusion.sequence.concepts.unbounded_sequence Unbounded Sequence]]
[def __containers__ [link fusion.container Container]]
[def __vector__ [link fusion.container.vector `vector`]]
[def __cons__ [link fusion.container.cons `cons`]]
[def __list__ [link fusion.container.list `list`]]
[def __deque__ [link fusion.container.deque `deque`]]
[def __front_extended_deque__ [link fusion.container.front_extended_deque `front_extended_deque`]]
[def __back_extended_deque__ [link fusion.container.back_extended_deque `back_extended_deque`]]
[def __set__ [link fusion.container.set `set`]]
[def __map__ [link fusion.container.map `map`]]
@ -128,6 +129,8 @@
[def __transform_view__ [link fusion.view.transform_view `transform_view`]]
[def __reverse_view__ [link fusion.view.reverse_view `reverse_view`]]
[def __zip_view__ [link fusion.view.zip_view `zip_view`]]
[def __flatten_view__ [link fusion.view.flatten_view `flatten_view`]]
[def __identity_view__ [link fusion.view.identity_view `identity_view`]]
[def __array__ [link fusion.adapted.array array]]
[def __std_pair__ [link fusion.adapted.std__pair `std::pair`]]
@ -173,6 +176,8 @@
[def __result_of_value_at__ [link fusion.sequence.intrinsic.metafunctions.value_at `result_of::value_at`]]
[def __result_of_value_at_c__ [link fusion.sequence.intrinsic.metafunctions.value_at_c `result_of::value_at_c`]]
[def __result_of_value_at_key__ [link fusion.sequence.intrinsic.metafunctions.value_at_key `result_of::value_at_key`]]
[def __swap__ [link fusion.sequence.intrinsic.functions.swap `swap`]]
[def __result_of_swap__ [link fusion.sequence.intrinsic.metafunctions.swap `result_of::swap`]]
[def __conversion__ [link fusion.container.conversion.functions Conversion]]
[def __result_of_conversion__ [link fusion.container.conversion.metafunctions Conversion Metafunctions]]
@ -198,12 +203,16 @@
[def __result_of_make_cons__ [link fusion.container.generation.metafunctions.make_cons `result_of::make_cons`]]
[def __make_list__ [link fusion.container.generation.functions.make_list `make_list`]]
[def __result_of_make_list__ [link fusion.container.generation.metafunctions.make_list `result_of::make_list`]]
[def __make_deque__ [link fusion.container.generation.functions.make_deque `make_deque`]]
[def __result_of_make_deque__ [link fusion.container.generation.metafunctions.make_deque `result_of::make_deque`]]
[def __make_set__ [link fusion.container.generation.functions.make_set `make_set`]]
[def __result_of_make_set__ [link fusion.container.generation.metafunctions.make_set `result_of::make_set`]]
[def __make_map__ [link fusion.container.generation.functions.make_map `make_map`]]
[def __result_of_make_map__ [link fusion.container.generation.metafunctions.make_map `result_of::make_map`]]
[def __list_tie__ [link fusion.container.generation.functions.list_tie `list_tie`]]
[def __result_of_list_tie__ [link fusion.container.generation.metafunctions.list_tie `result_of::list_tie`]]
[def __deque_tie__ [link fusion.container.generation.functions.deque_tie `deque_tie`]]
[def __result_of_deque_tie__ [link fusion.container.generation.metafunctions.deque_tie `result_of::deque_tie`]]
[def __out__ [link fusion.sequence.operator.i_o.out out]]
[def __in__ [link fusion.sequence.operator.i_o.in in]]
@ -217,6 +226,9 @@
[def __algorithm__ [link fusion.algorithm Algorithm]]
[def __algorithms__ [link fusion.algorithm Algorithms]]
[def __copy__ [link fusion.algorithm.auxiliary.functions.copy `copy`]]
[def __result_of_copy__ [link fusion.algorithm.auxiliary.metafunctions.copy `result_of::copy`]]
[def __move__ [link fusion.algorithm.auxiliary.functions.move `move`]]
[def __result_of_move__ [link fusion.algorithm.auxiliary.metafunctions.move `result_of::move`]]
[def __fold__ [link fusion.algorithm.iteration.functions.fold `fold`]]
[def __result_of_fold__ [link fusion.algorithm.iteration.metafunctions.fold `result_of::fold`]]
[def __reverse_fold__ [link fusion.algorithm.iteration.functions.reverse_fold `reverse_fold`]]
@ -281,6 +293,8 @@
[def __result_of_push_back__ [link fusion.algorithm.transformation.metafunctions.push_back `result_of::push_back`]]
[def __push_front__ [link fusion.algorithm.transformation.functions.push_front `push_front`]]
[def __result_of_push_front__ [link fusion.algorithm.transformation.metafunctions.push_front `result_of::push_front`]]
[def __flatten__ [link fusion.algorithm.transformation.functions.flatten `flatten`]]
[def __result_of_flatten__ [link fusion.algorithm.transformation.metafunctions.flatten `result_of::flatten`]]
[def __tr1_tuple_pair__ [link fusion.tuple.pairs `TR1 and std::pair`]]
[def __tuple_get__ [link fusion.tuple.class_template_tuple.element_access `get`]]
@ -305,17 +319,17 @@
[def __result_of_invoke__ [link fusion.functional.invocation.metafunctions.invoke `result_of::invoke`]]
[def __result_of_invoke_procedure__ [link fusion.functional.invocation.metafunctions.invoke_proc `result_of::invoke_procedure`]]
[def __result_of_invoke_function_object__ [link fusion.functional.invocation.metafunctions.invoke_fobj `result_of::invoke_function_object`]]
[def __result_of_make_fused__ [link fusion.functional.generation.metafunctions.mk_fused `make_fused`]]
[def __result_of_make_fused_procedure__ [link fusion.functional.generation.metafunctions.mk_fused_proc `make_fused_procedure`]]
[def __result_of_make_fused_function_object__ [link fusion.functional.generation.metafunctions.mk_fused_fobj `make_fused_function_object`]]
[def __result_of_make_unfused__ [link fusion.functional.generation.metafunctions.mk_unfused `make_unfused`]]
[def __result_of_make_fused__ [link fusion.functional.generation.metafunctions.mk_fused `result_of::make_fused`]]
[def __result_of_make_fused_procedure__ [link fusion.functional.generation.metafunctions.mk_fused_proc `result_of::make_fused_procedure`]]
[def __result_of_make_fused_function_object__ [link fusion.functional.generation.metafunctions.mk_fused_fobj `result_of::make_fused_function_object`]]
[def __result_of_make_unfused__ [link fusion.functional.generation.metafunctions.mk_unfused `result_of::make_unfused`]]
[def __recursive_inline__ [link fusion.notes.recursive_inlined_functions Recursive Inlined Functions]]
[def __overloaded_functions__ [link fusion.notes.overloaded_functions Overloaded Functions]]
[def __tag_dispatching__ [link fusion.notes.tag_dispatching /tag dispatching/]]
[def __element_conversion__ [link fusion.notes.element_conversion /element conversion/]]
[def __see_element_conversion__ [link fusion.notes.element_conversion /see element conversion/]]
[def __note_boost_ref__ [link fusion.notes.boost__ref `boost::ref`]]
[def __note_ref_wrappers__ [link fusion.notes.reference_wrappers `Reference Wrappers`]]
[def __quick_start__ [link fusion.quick_start Quick Start]]
[def __organization__ [link fusion.organization Organization]]
@ -325,6 +339,8 @@
[def __adt_attribute_proxy__ [link fusion.notes.adt_attribute_proxy `adt_attribute_proxy`]]
[def __window_function__ [@http://en.wikipedia.org/wiki/Window_function Window Function]]
[include preface.qbk]
[include introduction.qbk]
[include quick_start.qbk]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 658 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 640 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,16 +1,288 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
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) -->
<title>Redirect to generated documentation</title>
<meta http-equiv="refresh" content="0; URL=http://boost-sandbox.sourceforge.net/libs/fusion/doc/html/">
</head>
<body>
Automatic redirection failed, please go to
<a href="http://boost-sandbox.sourceforge.net/libs/fusion/doc/html/">http://boost-sandbox.sourceforge.net/libs/fusion/doc/html/</a>
</body>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Chapter&#160;1.&#160;Fusion 2.2</title>
<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="index.html" title="Chapter&#160;1.&#160;Fusion 2.2">
<link rel="next" href="fusion/preface.html" title="Preface">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td>
<td align="center"><a href="../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav"><a accesskey="n" href="fusion/preface.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
<div class="chapter">
<div class="titlepage"><div>
<div><h2 class="title">
<a name="fusion"></a>Chapter&#160;1.&#160;Fusion 2.2</h2></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Joel</span> <span class="surname">de Guzman</span>
</h3></div></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Dan</span> <span class="surname">Marsden</span>
</h3></div></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Tobias</span> <span class="surname">Schwinger</span>
</h3></div></div>
<div><p class="copyright">Copyright &#169; 2001-2006, 2011, 2012 Joel de Guzman,
Dan Marsden, Tobias Schwinger</p></div>
<div><div class="legalnotice">
<a name="fusion.legal"></a><p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></div>
</div></div>
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
<dt><span class="section"><a href="fusion/preface.html">Preface</a></span></dt>
<dt><span class="section"><a href="fusion/introduction.html">Introduction</a></span></dt>
<dt><span class="section"><a href="fusion/quick_start.html">Quick Start</a></span></dt>
<dt><span class="section"><a href="fusion/organization.html">Organization</a></span></dt>
<dt><span class="section"><a href="fusion/support.html">Support</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/support/is_sequence.html">is_sequence</a></span></dt>
<dt><span class="section"><a href="fusion/support/is_view.html">is_view</a></span></dt>
<dt><span class="section"><a href="fusion/support/tag_of.html">tag_of</a></span></dt>
<dt><span class="section"><a href="fusion/support/category_of.html">category_of</a></span></dt>
<dt><span class="section"><a href="fusion/support/deduce.html">deduce</a></span></dt>
<dt><span class="section"><a href="fusion/support/deduce_sequence.html">deduce_sequence</a></span></dt>
<dt><span class="section"><a href="fusion/support/pair.html">pair</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator.html">Iterator</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/concepts.html">Concepts</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/concepts/forward_iterator.html">Forward
Iterator</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/concepts/bidirectional_iterator.html">Bidirectional
Iterator</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/concepts/random_access_iterator.html">Random
Access Iterator</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/concepts/associative_iterator.html">Associative
Iterator</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/concepts/unbounded_iterator.html">Unbounded
Iterator</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator/functions.html">Functions</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/functions/deref.html">deref</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/next.html">next</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/prior.html">prior</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/distance.html">distance</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/advance.html">advance</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/advance_c.html">advance_c</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/deref_data.html">deref_data</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator/operator.html">Operator</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/operator/operator_unary_star.html">Operator
*</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/operator/operator_equality.html">Operator
==</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/operator/operator_inequality.html">Operator
!=</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator/metafunctions.html">Metafunctions</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/metafunctions/value_of.html">value_of</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/deref.html">deref</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/next.html">next</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/prior.html">prior</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/equal_to.html">equal_to</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/distance.html">distance</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/advance.html">advance</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/advance_c.html">advance_c</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/key_of.html">key_of</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/value_of_data.html">value_of_data</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/deref_data.html">deref_data</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="section"><a href="fusion/sequence.html">Sequence</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/sequence/concepts.html">Concepts</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/sequence/concepts/forward_sequence.html">Forward
Sequence</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/concepts/bidirectional_sequence.html">Bidirectional
Sequence</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/concepts/random_access_sequence.html">Random
Access Sequence</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/concepts/associative_sequence.html">Associative
Sequence</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/concepts/unbounded_sequence.html">Unbounded
Sequence</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/sequence/intrinsic.html">Intrinsic</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/sequence/intrinsic/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/intrinsic/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/sequence/operator.html">Operator</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/sequence/operator/i_o.html">I/O</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/operator/comparison.html">Comparison</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/operator/hashing.html">Hashing</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="section"><a href="fusion/container.html">Container</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/container/vector.html">vector</a></span></dt>
<dt><span class="section"><a href="fusion/container/cons.html">cons</a></span></dt>
<dt><span class="section"><a href="fusion/container/list.html">list</a></span></dt>
<dt><span class="section"><a href="fusion/container/deque.html">deque</a></span></dt>
<dt><span class="section"><a href="fusion/container/front_extended_deque.html">front_extended_deque</a></span></dt>
<dt><span class="section"><a href="fusion/container/back_extended_deque.html">back_extended_deque</a></span></dt>
<dt><span class="section"><a href="fusion/container/set.html">set</a></span></dt>
<dt><span class="section"><a href="fusion/container/map.html">map</a></span></dt>
<dt><span class="section"><a href="fusion/container/generation.html">Generation</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/container/generation/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/container/generation/metafunctions.html">MetaFunctions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/container/conversion.html">Conversion</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/container/conversion/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/container/conversion/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="section"><a href="fusion/view.html">View</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/view/single_view.html">single_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/filter_view.html">filter_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/iterator_range.html">iterator_range</a></span></dt>
<dt><span class="section"><a href="fusion/view/joint_view.html">joint_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/zip_view.html">zip_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/transform_view.html">transform_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/reverse_view.html">reverse_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/identity_view.html">identity_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/nview.html">nview</a></span></dt>
<dt><span class="section"><a href="fusion/view/repetitive_view.html">repetitive_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/flatten_view.html">flatten_view</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/adapted.html">Adapted</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/adapted/array.html">Array</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/std__pair.html">std::pair</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/std__tuple.html">std::tuple</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/mpl_sequence.html">mpl sequence</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/boost__array.html">boost::array</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/boost__tuple.html">boost::tuple</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_struct.html">BOOST_FUSION_ADAPT_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_tpl_struct.html">BOOST_FUSION_ADAPT_TPL_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_struct_named.html">BOOST_FUSION_ADAPT_STRUCT_NAMED</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_assoc.html">BOOST_FUSION_ADAPT_ASSOC_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_assoc_tpl_struct.html">BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_assoc_struct_named.html">BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_adt.html">BOOST_FUSION_ADAPT_ADT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_tpl_adt.html">BOOST_FUSION_ADAPT_TPL_ADT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_assoc_adt.html">BOOST_FUSION_ADAPT_ASSOC_ADT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_assoc_tpl_adt.html">BOOST_FUSION_ADAPT_ASSOC_TPL_ADT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/define_struct.html">BOOST_FUSION_DEFINE_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/define_tpl_struct.html">BOOST_FUSION_DEFINE_TPL_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/define_struct_inline.html">BOOST_FUSION_DEFINE_STRUCT_INLINE</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/define_tpl_struct_inline.html">BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/define_assoc_struct.html">BOOST_FUSION_DEFINE_ASSOC_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/define_assoc_tpl_struct.html">BOOST_FUSION_DEFINE_ASSOC_TPL_STRUCT</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/algorithm.html">Algorithm</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/algorithm/auxiliary.html">Auxiliary</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/algorithm/auxiliary/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/algorithm/auxiliary/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/algorithm/iteration.html">Iteration</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/algorithm/iteration/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/algorithm/iteration/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/algorithm/query.html">Query</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/algorithm/query/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/algorithm/query/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/algorithm/transformation.html">Transformation</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/algorithm/transformation/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/algorithm/transformation/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="section"><a href="fusion/tuple.html">Tuple</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/tuple/class_template_tuple.html">Class template tuple</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/tuple/class_template_tuple/construction.html">Construction</a></span></dt>
<dt><span class="section"><a href="fusion/tuple/class_template_tuple/tuple_creation_functions.html">Tuple
creation functions</a></span></dt>
<dt><span class="section"><a href="fusion/tuple/class_template_tuple/tuple_helper_classes.html">Tuple
helper classes</a></span></dt>
<dt><span class="section"><a href="fusion/tuple/class_template_tuple/element_access.html">Element
access</a></span></dt>
<dt><span class="section"><a href="fusion/tuple/class_template_tuple/relational_operators.html">Relational
operators</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/tuple/pairs.html">Pairs</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/extension.html">Extension</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/extension/ext_full.html">The Full Extension Mechanism</a></span></dt>
<dt><span class="section"><a href="fusion/extension/sequence_facade.html">Sequence Facade</a></span></dt>
<dt><span class="section"><a href="fusion/extension/iterator_facade.html">Iterator Facade</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/functional.html">Functional</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/functional/concepts.html">Concepts</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/functional/concepts/callable.html">Callable Object</a></span></dt>
<dt><span class="section"><a href="fusion/functional/concepts/reg_callable.html">Regular Callable
Object</a></span></dt>
<dt><span class="section"><a href="fusion/functional/concepts/def_callable.html">Deferred Callable
Object</a></span></dt>
<dt><span class="section"><a href="fusion/functional/concepts/poly.html">Polymorphic Function
Object</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/functional/invocation.html">Invocation</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/functional/invocation/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/functional/invocation/metafunctions.html">Metafunctions</a></span></dt>
<dt><span class="section"><a href="fusion/functional/invocation/limits.html">Limits</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/functional/adapters.html">Adapters</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/functional/adapters/fused.html">fused</a></span></dt>
<dt><span class="section"><a href="fusion/functional/adapters/fused_procedure.html">fused_procedure</a></span></dt>
<dt><span class="section"><a href="fusion/functional/adapters/fused_function_object.html">fused_function_object</a></span></dt>
<dt><span class="section"><a href="fusion/functional/adapters/unfused.html">unfused</a></span></dt>
<dt><span class="section"><a href="fusion/functional/adapters/unfused_typed.html">unfused_typed</a></span></dt>
<dt><span class="section"><a href="fusion/functional/adapters/limits.html">Limits</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/functional/generation.html">Generation</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/functional/generation/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/functional/generation/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="section"><a href="fusion/notes.html">Notes</a></span></dt>
<dt><span class="section"><a href="fusion/change_log.html">Change log</a></span></dt>
<dt><span class="section"><a href="fusion/acknowledgements.html">Acknowledgements</a></span></dt>
<dt><span class="section"><a href="fusion/references.html">References</a></span></dt>
</dl>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"><p><small>Last revised: June 25, 2015 at 13:41:27 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
<div class="spirit-nav"><a accesskey="n" href="fusion/preface.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
</body>
</html>

View File

@ -67,8 +67,7 @@ the following expressions are valid:
]
[heading Expression Semantics]
[
table
[table
[[Expression] [Semantics]]
[[`__next__(i)`] [An iterator to the element following `i`]]
[[`i == j`] [Iterator equality comparison]]
@ -255,6 +254,13 @@ expressions must be valid:
* __iterator_range__ iterator (where adapted iterators are __associative_iterator__\ s)
* __joint_view__ iterator (where adapted sequences are __associative_sequence__\ s and __forward_sequence__\ s)
* __reverse_view__ iterator (where adapted sequence is an __associative_sequence__ and a __bidirectional_sequence__)
* __transform_view__ iterator (where adapted sequence is an __associative_sequence__ and a __forward_sequence__)
[endsect]
[section Unbounded Iterator]
[warning In this release, __unbounded_iterator__ concept has no effect. It's reserved for future release.]
[endsect]
@ -418,15 +424,15 @@ Moves an iterator by a specified distance.
[heading Synopsis]
template<
typename I,
typename M
typename M,
typename I
>
typename __result_of_advance__<I, M>::type advance(I const& i);
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`i`] [Model of __forward_iterator__] [Iterator to move relative to]]
[[`N`] [An __mpl_integral_constant__] [Number of positions to move]]
[[`M`] [An __mpl_integral_constant__] [Number of positions to move]]
]
[heading Expression Semantics]
@ -455,8 +461,8 @@ Moves an iterator by a specified distance.
[heading Synopsis]
template<
typename I,
int N
int N,
typename I
>
typename __result_of_advance_c__<I, N>::type advance_c(I const& i);
@ -494,7 +500,7 @@ Deferences the data property associated with the element referenced by an associ
template<
typename I
>
typename __result_of_deref_data__<I>::type deref(I const& i);
typename __result_of_deref_data__<I>::type deref_data(I const& i);
[table Parameters
[[Parameter] [Requirement] [Description]]
@ -513,7 +519,7 @@ Deferences the data property associated with the element referenced by an associ
#include <boost/fusion/include/deref_data.hpp>
[heading Example]
typedef __map__<__pair__<float,int&> > map;
typedef __map__<__pair__<float, int&> > map;
int i(0);
map m(1.0f,i);
@ -537,7 +543,7 @@ Dereferences an iterator.
template<
typename I
>
typename __result_of_deref__<I>::type operator*(__unspecified__<I> const& i);
typename __result_of_deref__<I>::type operator*(I const& i);
[table Parameters
[[Parameter] [Requirement] [Description]]
@ -677,7 +683,7 @@ Returns the type stored at the position of an iterator.
[heading Description]
Returns the type that will be returned by dereferencing an iterator.
[heading Synposis]
[heading Synopsis]
template<
typename I
>
@ -721,7 +727,7 @@ Returns the type that will be returned by dereferencing an iterator.
[heading Description]
Returns the type of the next iterator in a sequence.
[heading Synposis]
[heading Synopsis]
template<
typename I
>
@ -1044,7 +1050,7 @@ Returns the type of the data property associated with the element referenced by
[heading Description]
Returns the type that will be returned by dereferencing the data property referenced by an associative iterator.
[heading Synposis]
[heading Synopsis]
template<
typename I
>
@ -1066,18 +1072,17 @@ Returns the type that will be returned by dereferencing the data property refere
[*Semantics]: Returns the result of dereferencing the data property referenced by an associative iterator of type `I`.
[heading Header]
#include <boosta/fusion/iterator/deref_data.hpp>
#include <boost/fusion/iterator/deref_data.hpp>
#include <boost/fusion/include/deref_data.hpp>
[heading Example]
typedef __map__<__pair__<float,int> > map;
typedef __result_of_begin__<vec>::type first;
BOOST_MPL_ASSERT((boost::is_same<__result_of_deref_data__<first>::type, int&>));
typedef map<pair<float, int> > map_type;
typedef boost::fusion::result_of::begin<map_type>::type i_type;
typedef boost::fusion::result_of::deref_data<i_type>::type r_type;
BOOST_STATIC_ASSERT((boost::is_same<r_type, int&>::value));
[endsect]
[endsect]
[endsect]

View File

@ -58,10 +58,10 @@ In the case:
[heading Extensibility]
Unlike __mpl__, there is no extensibe sequence concept in fusion. This does
Unlike __mpl__, there is no extensible sequence concept in fusion. This does
not mean that Fusion sequences are not extensible. In fact, all Fusion
sequences are inherently extensible. It is just that the manner of sequence
extension in Fusion is diferent from both __stl__ and __mpl__ on account of
extension in Fusion is different from both __stl__ and __mpl__ on account of
the lazy nature of fusion __algorithms__. __stl__ containers extend
themselves in place though member functions such as __push_back__ and
__insert__. __mpl__ sequences, on the other hand, are extended through
@ -100,7 +100,7 @@ Array arguments are deduced to reference to const types. For example
[footnote Note that the type of a string literal is an array of const
characters, not `const char*`. To get __make_list__ to create a __list__
with an element of a non-const array type one must use the `ref` wrapper
(see __note_boost_ref__).]:
(see __note_ref_wrappers__).]:
__make_list__("Donald", "Daisy")
@ -121,7 +121,7 @@ creates a __list__ of type
__list__<void (*)(int)>
[heading boost::ref]
[heading Reference Wrappers]
Fusion's generation functions (e.g. __make_list__) by default stores the
element types as plain non-reference types. Example:
@ -151,6 +151,8 @@ For example:
See __boost_ref__ for details.
Since C++11, the standard reference wrappers (`std::ref` and `std::cref`) work as well.
[heading adt_attribute_proxy]
To adapt arbitrary data types that do not allow direct access to their members,

View File

@ -36,24 +36,31 @@ link against.
* tuple
* algorithm
* auxiliary
* iteration
* query
* transformation
* adapted
* adt
* array
* mpl
* boost::array
* boost::tuple
* mpl
* std_pair
* std_tuple
* struct
* variant
* view
* filter_view
* flatten_view
* iterator_range
* joint_view
* nview
* repetitive_view
* reverse_view
* single_view
* transform_view
* zip_view
* identity_view
* container
* deque
* list
@ -63,6 +70,9 @@ link against.
* generation
* mpl
* functional
* adapter
* generation
* invocation
* sequence
* comparison
* intrinsic

View File

@ -13,7 +13,7 @@
[heading Description]
Fusion is a library for working with heterogenous collections of data,
Fusion is a library for working with heterogeneous collections of data,
commonly referred to as tuples. A set of containers (vector, list, set and map)
is provided, along with views that provide a transformed presentation
of their underlying data. Collectively the containers and views are referred to
@ -31,7 +31,7 @@ Tuples are powerful beasts. After having developed two significant projects
(__spirit__ and __phoenix__) that relied heavily metaprogramming, it
became apparent that tuples are a powerful means to simplify otherwise tricky
tasks; especially those that require a combination of metaprogramming and
manipulation of heterogenous data types with values. While __mpl__ is an
manipulation of heterogeneous data types with values. While __mpl__ is an
extremely powerful metaprogramming tool, __mpl__ focuses on type
manipulation only. Ultimately, you'll have to map these types to real
values to make them useful in the runtime world where all the real action
@ -49,16 +49,11 @@ and traversal routines. It was an instant /AHA!/ moment.
Some icons are used to mark certain topics indicative of their relevance.
These icons precede some text to indicate:
[table Icons
[[Icon] [Name] [Meaning]]
[[__note__] [Note] [Information provided is auxiliary but will
give the reader a deeper insight into a specific
topic. May be skipped.]]
[[__alert__] [Alert] [Information provided is of utmost importance.]]
[[__caution__] [Caution] [A mild warning.]]
[[__tip__] [Tip] [A potentially useful and helpful piece of
information.]]
]
[note Information provided is auxiliary but will give the reader a deeper
insight into a specific topic. May be skipped.]
[important Information provided is of utmost importance.]
[caution A mild warning.]
[tip A potentially useful and helpful piece of information.]
This documentation is automatically generated by Boost QuickBook documentation
tool. QuickBook can be found in the __boost_tools__.
@ -66,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]

View File

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

View File

@ -1,6 +1,7 @@
[/==============================================================================
Copyright (C) 2001-2011 Joel de Guzman
Copyright (C) 2006 Dan Marsden
Copyright (C) 2014 Christoph Weiss
Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@ -38,6 +39,11 @@ These concepts pertain to sequence traversal.
The __associative_sequence__ concept is orthogonal to traversal. An Associative
Sequence allows efficient retrieval of elements based on keys.
[heading Boundary]
The __unbounded_sequence__ concept is also orthogonal to traversal and associativity.
A Unbounded Sequence allows out-of-bounds access.
[section Forward Sequence]
[heading Description]
@ -142,8 +148,8 @@ __bidirectional_iterator__.
__forward_sequence__
[variablelist Notation
[[`s`] [A Forward Sequence]]
[[`S`] [A Forward Sequence type]]
[[`s`] [A Bidirectional Sequence]]
[[`S`] [A Bidirectional Sequence type]]
[[`o`] [An arbitrary object]]
[[`e`] [A Sequence element]]
]
@ -160,7 +166,7 @@ Bidirectional Sequence the following must be met:
[[`__back__(s)`] [Any type] [] [Constant]]
[[`__back__(s) = o`] [Any type] [`s` is mutable and
`e = o`, where `e`
is the first element
is the last element
in the sequence, is
a valid expression.] [Constant]]
]
@ -213,7 +219,8 @@ __bidirectional_sequence__
[variablelist Notation
[[`s`] [A Random Access Sequence]]
[[`S`] [A Random Access Sequence type]]
[[`N`] [An __mpl_integral_constant__]]
[[`M`] [An __mpl__ integral constant]]
[[`N`] [An integral constant]]
[[`o`] [An arbitrary object]]
[[`e`] [A Sequence element]]
]
@ -227,12 +234,18 @@ any Random Access Sequence the following must be met:
[[Expression] [Return type] [Type Requirements] [Runtime Complexity]]
[[`__begin__(s)`] [__random_access_iterator__] [] [Constant]]
[[`__end__(s)`] [__random_access_iterator__] [] [Constant]]
[[`__at__<N>(s)`] [Any type] [] [Constant]]
[[`__at__<N>(s) = o`] [Any type] [`s` is mutable and
[[`__at_c__<N>(s)`] [Any type] [] [Constant]]
[[`__at_c__<N>(s) = o`] [Any type] [`s` is mutable and
`e = o`, where `e`
is the first element
in the sequence, is
a valid expression.] [Constant]]
is the N-th element from the beginning
of the sequence, is
a valid expression.] [Constant]]
[[`__at__<M>(s)`] [Any type] [] [Constant]]
[[`__at__<M>(s) = o`] [Any type] [`s` is mutable and
`e = o`, where `e`
is the M-th element from the beginning
of the sequence, is
a valid expression.] [Constant]]
]
[heading Result Type Expressions]
@ -241,15 +254,18 @@ any Random Access Sequence the following must be met:
[[Expression] [Compile Time Complexity]]
[[`__result_of_begin__<S>::type`] [Amortized constant time]]
[[`__result_of_end__<S>::type`] [Amortized constant time]]
[[`__result_of_at__<S, N>::type`] [Amortized constant time]]
[[`__result_of_value_at__<S, N>::type`] [Amortized constant time]]
[[`__result_of_at__<S, M>::type`] [Amortized constant time]]
[[`__result_of_at_c__<S, N>::type`] [Amortized constant time]]
[[`__result_of_value_at__<S, M>::type`] [Amortized constant time]]
[[`__result_of_value_at_c__<S, N>::type`] [Amortized constant time]]
]
[blurb __note__ `__result_of_at__<S, N>` returns the actual type returned by
`__at__<N>(s)`. In most cases, this is a reference. Hence, there is no way to
know the exact element type using `__result_of_at__<S, N>`.The element at `N`
[note `__result_of_at__<S, M>` returns the actual type returned by
`__at__<M>(s)`. In most cases, this is a reference. Hence, there is no way to
know the exact element type using `__result_of_at__<S, M>`.The element at `M`
may actually be a reference to begin with. For this purpose, you can use
`__result_of_value_at__<S, N>`.]
`__result_of_value_at__<S, M>` (Note that, `__result_of_value_at_c__<S, N>`
is a counterpart of `__result_of_at_c__<S, N>` as well).]
[heading Expression Semantics]
@ -258,7 +274,8 @@ are not defined in __bidirectional_sequence__.
[table
[[Expression] [Semantics]]
[[`__at__<N>(s)`] [The Nth element from the beginning of the sequence; see __at__.]]
[[`__at__<M>(s)`] [The Mth element from the beginning of the sequence; see __at__.]]
[[`__at_c__<N>(s)`] [The Nth element from the beginning of the sequence; see __at_c__.]]
]
[heading Models]
@ -283,6 +300,7 @@ An Associative Sequence allows efficient retrieval of elements based on keys.
Like associative sequences in __mpl__, and unlike associative containers in
__stl__, Fusion associative sequences have no implied ordering relation.
Instead, type identity is used to impose an equivalence relation on keys.
Keys are not checked for uniqueness.
[variablelist Notation
[[`s`] [An Associative Sequence]]
@ -303,8 +321,7 @@ For any Associative Sequence the following expressions must be valid:
[[`__at_key__<K>(s)`] [Any type] [] [Constant]]
[[`__at_key__<K>(s) = o`] [Any type] [`s` is mutable and
`e = o`, where `e`
is the first element
in the sequence, is
is the element associated with K, is
a valid expression.] [Constant]]
]
@ -317,11 +334,11 @@ For any Associative Sequence the following expressions must be valid:
[[`__result_of_value_at_key__<S, K>::type`] [Amortized constant time]]
]
[blurb __note__ `__result_of_at_key__<S, K>` returns the actual type returned
[note `__result_of_at_key__<S, K>` returns the actual type returned
by `__at_key__<K>(s)`. In most cases, this is a reference. Hence, there is no
way to know the exact element type using `__result_of_at_key__<S, K>`.The
element at `K` may actually be a reference to begin with. For this purpose,
you can use `__result_of_value_at_key__<S, N>`.]
you can use `__result_of_value_at_key__<S, K>`.]
[heading Expression Semantics]
@ -343,6 +360,56 @@ you can use `__result_of_value_at_key__<S, N>`.]
* __iterator_range__ (where adapted iterators are __associative_iterator__\ s)
* __joint_view__ (where adapted sequences are __associative_sequence__\ s and __forward_sequence__\ s)
* __reverse_view__ (where adapted sequence is an __associative_sequence__ and a __bidirectional_sequence__)
* __transform_view__ (where adapted sequence is an __associative_sequence__ and a __forward_sequence__)
[endsect]
[section Unbounded Sequence]
[heading Description]
A Unbounded Sequence allows Out-of-Bounds access: it will achieve something like a __window_function__.
Most of the sequences do not meet this concept, but some special usecases do.
[important User extending sequences should handle any parameters or be SFINAE-friendly.]
[variablelist Notation
[[`s`] [An Fusion Sequence]]
[[`S`] [An Fusion Sequence type]]
[[`M`] [An __mpl__ integral constant]]
[[`N`] [An integral constant]]
[[`K`] [An arbitrary /key/ type]]
[[`o`] [An arbitrary object]]
[[`e`] [A Sequence element]]
]
[heading Valid Expressions]
[table
[[Expression] [Return type] [Type Requirements] [Runtime Complexity]]
[[`__at_c__<N>(s)`] [Any type] [] [Depends on its traversability]]
[[`__at_c__<N>(s) = o`] [Any type] [] [Depends on its traversability]]
[[`__at__<M>(s)`] [Any type] [] [Depends on its traversability]]
[[`__at__<M>(s) = o`] [Any type] [] [Depends on its traversability]]
[[`__at_key__<K>(s)`] [Any type] [`S` should be __associative_sequence__] [Depends on its traversability]]
[[`__at_key__<K>(s) = o`] [Any type] [`S` should be __associative_sequence__] [Depends on its traversability]]
]
[heading Result Type Expressions]
[table
[[Expression] [Compile Time Complexity]]
[[`__result_of_at__<S, M>::type`] [Depends on its traversability]]
[[`__result_of_at_c__<S, N>::type`] [Depends on its traversability]]
[[`__result_of_value_at__<S, M>::type`] [Depends on its traversability]]
[[`__result_of_value_at_c__<S, N>::type`] [Depends on its traversability]]
[[`__result_of_at_key__<S, K>::type`] [Depends on its traversability]]
[[`__result_of_value_at_key__<S, K>::type`] [Depends on its traversability]]
]
[heading Models]
* none.
[endsect]
@ -531,7 +598,7 @@ Returns the first element in the sequence.
[*Return type]: Returns a reference to the first element in the sequence
`seq` if `seq` is mutable and `e = o`, where `e` is the first element in
the sequence, is a valid expression. Else, returns a type convertable to
the sequence, is a valid expression. Else, returns a type convertible to
the first element in the sequence.
[*Precondition]: `__empty__(seq) == false`
@ -579,7 +646,7 @@ Returns the last element in the sequence.
[*Return type]: Returns a reference to the last element in the sequence
`seq` if `seq` is mutable and `e = o`, where `e` is the last element in the
sequence, is a valid expression. Else, returns a type convertable to the
sequence, is a valid expression. Else, returns a type convertible to the
last element in the sequence.
[*Precondition]: `__empty__(seq) == false`
@ -642,16 +709,16 @@ in the sequence.
[heading Description]
Returns the N-th element from the beginning of the sequence.
Returns the M-th element from the beginning of the sequence.
[heading Synopsis]
template <typename N, typename Sequence>
typename __result_of_at__<Sequence, N>::type
template <typename M, typename Sequence>
typename __result_of_at__<Sequence, M>::type
at(Sequence& seq);
template <typename N, typename Sequence>
typename __result_of_at__<Sequence const, N>::type
template <typename M, typename Sequence>
typename __result_of_at__<Sequence const, M>::type
at(Sequence const& seq);
[heading Parameters]
@ -659,25 +726,25 @@ Returns the N-th element from the beginning of the sequence.
[table
[[Parameter] [Requirement] [Description]]
[[`seq`] [Model of __random_access_sequence__] [The sequence we wish to investigate.]]
[[`N`] [An __mpl_integral_constant__] [An index from the beginning of the
[[`M`] [An __mpl_integral_constant__] [An index from the beginning of the
sequence.]]
]
[heading Expression Semantics]
at<N>(seq);
at<M>(seq);
[*Return type]: Returns a reference to the N-th element from the beginning
of the sequence `seq` if `seq` is mutable and `e = o`, where `e` is the N-th
[*Return type]: Returns a reference to the M-th element from the beginning
of the sequence `seq` if `seq` is mutable and `e = o`, where `e` is the M-th
element from the beginning of the sequence, is a valid expression. Else,
returns a type convertable to the N-th element from the beginning of the
returns a type convertible to the M-th element from the beginning of the
sequence.
[*Precondition]: `0 <= N::value < __size__(s)`
[*Precondition]: `0 <= M::value < __size__(seq)` (where `seq` is not __unbounded_sequence__)
[*Semantics]: Equivalent to
__deref__(__advance__<N>(__begin__(s)))
__deref__(__advance__<M>(__begin__(s)))
[heading Header]
@ -723,10 +790,10 @@ Returns the N-th element from the beginning of the sequence.
[*Return type]: Returns a reference to the N-th element from the beginning
of the sequence `seq` if `seq` is mutable and `e = o`, where `e` is the N-th
element from the beginning of the sequence, is a valid expression. Else,
returns a type convertable to the N-th element from the beginning of the
returns a type convertible to the N-th element from the beginning of the
sequence.
[*Precondition]: `0 <= N < __size__(s)`
[*Precondition]: `0 <= N < __size__(seq)` (where `seq` is not __unbounded_sequence__)
[*Semantics]: Equivalent to
@ -818,9 +885,9 @@ Returns the element associated with a Key from the sequence.
[*Return type]: Returns a reference to the element associated with Key from
the sequence `seq` if `seq` is mutable and `e = o`, where `e` is the
element associated with Key, is a valid expression. Else, returns a type
convertable to the element associated with Key.
convertible to the element associated with Key.
[*Precondition]: `has_key<Key>(seq) == true`
[*Precondition]: `has_key<Key>(seq) == true` (where `seq` is not __unbounded_sequence__)
[*Semantics]: Returns the element associated with Key.
@ -844,13 +911,14 @@ Performs an element by element swap of the elements in 2 sequences.
[heading Synopsis]
template<typename Seq1, typename Seq2>
void swap(Seq1& seq1, Seq2& seq2);
typename __result_of_swap__<Seq1, Seq2>::type
swap(Seq1& seq1, Seq2& seq2);
[heading Parameters]
[table
[[Parameters] [Requirement] [Description]]
[[`seq1`, `seq2`][Models of __forward_sequence__][The sequences whos elements we wish to swap.]]
[[`seq1`, `seq2`][Models of __forward_sequence__][The sequences whose elements we wish to swap.]]
]
[heading Expression Semantics]
@ -863,7 +931,10 @@ Performs an element by element swap of the elements in 2 sequences.
[*Semantics]: Calls `swap(a1, b1)` for corresponding elements in `seq1` and `seq2`.
/sequence/intrinsic/swap.hpp>
[heading Header]
#include <boost/fusion/sequence/intrinsic/swap.hpp>
#include <boost/fusion/include/swap.hpp>
[heading Example]
__vector__<int, std::string> v1(1, "hello"), v2(2, "world");
@ -1115,7 +1186,7 @@ the actual element type, use __result_of_value_at__].
[heading Synopsis]
template<
typename Seq,
typename N>
typename M>
struct at
{
typedef __unspecified__ type;
@ -1124,15 +1195,17 @@ the actual element type, use __result_of_value_at__].
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq`][A model of __random_access_sequence__][Argument sequence]]
[[`N`][An __mpl_integral_constant__][Index of element]]
[[`M`][An __mpl_integral_constant__][Index of element]]
]
[heading Expression Semantics]
result_of::at<Seq, N>::type
result_of::at<Seq, M>::type
[*Return type]: Any type.
[*Semantics]: Returns the result type of using __at__ to access the `N`th element of `Seq`.
[*Precondition]: `0 <= M::value < __result_of_size__<Seq>::value` (where `Seq` is not __unbounded_sequence__)
[*Semantics]: Returns the result type of using __at__ to access the `M`th element of `Seq`.
[heading Header]
@ -1157,7 +1230,7 @@ get the actual element type, use __result_of_value_at_c__].
[heading Synopsis]
template<
typename Seq,
int M>
int N>
struct at_c
{
typedef __unspecified__ type;
@ -1166,15 +1239,17 @@ get the actual element type, use __result_of_value_at_c__].
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq`][A model of __random_access_sequence__][Argument sequence]]
[[`M`][Positive integer index][Index of element]]
[[`N`][Positive integer index][Index of element]]
]
[heading Expression Semantics]
result_of::at_c<Seq, M>::type
result_of::at_c<Seq, N>::type
[*Return type]: Any type
[*Semantics]: Returns the result type of using __at_c__ to access the `M`th element of `Seq`.
[*Precondition]: `0 <= N < __result_of_size__<Seq>::value` (where `Seq` is not __unbounded_sequence__)
[*Semantics]: Returns the result type of using __at_c__ to access the `N`th element of `Seq`.
[heading Header]
@ -1196,7 +1271,7 @@ Returns the actual type at a given index from the __sequence__.
[heading Synopsis]
template<
typename Seq,
typename N>
typename M>
struct value_at
{
typedef __unspecified__ type;
@ -1205,15 +1280,15 @@ Returns the actual type at a given index from the __sequence__.
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq`][A model of __random_access_sequence__][Argument sequence]]
[[`N`][An __mpl_integral_constant__][Index of element]]
[[`M`][An __mpl_integral_constant__][Index of element]]
]
[heading Expression Semantics]
result_of::value_at<Seq, N>::type
result_of::value_at<Seq, M>::type
[*Return type]: Any type.
[*Semantics]: Returns the actual type at the `N`th element of `Seq`.
[*Semantics]: Returns the actual type at the `M`th element of `Seq`.
[heading Header]
@ -1235,7 +1310,7 @@ Returns the actual type at a given index from the __sequence__.
[heading Synopsis]
template<
typename Seq,
int M>
int N>
struct value_at_c
{
typedef __unspecified__ type;
@ -1244,15 +1319,15 @@ Returns the actual type at a given index from the __sequence__.
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq`][A model of __random_access_sequence__][Argument sequence]]
[[`M`][Positive integer index][Index of element]]
[[`N`][Positive integer index][Index of element]]
]
[heading Expression Semantics]
result_of::value_at_c<Seq, M>::type
result_of::value_at_c<Seq, N>::type
[*Return type]: Any type
[*Semantics]: Returns the actual type at the `M`th element of `Seq`.
[*Semantics]: Returns the actual type at the `N`th element of `Seq`.
[heading Header]
@ -1309,7 +1384,7 @@ Returns the result type of __has_key__.
[heading Description]
Returns the result type of __at_key__[footnote __result_of_at_key__
reflects the actual return type of the function __at_key__. __sequence__s
reflects the actual return type of the function __at_key__. __sequence__(s)
typically return references to its elements via the __at_key__ function. If
you want to get the actual element type, use __result_of_value_at_key__].
@ -1333,6 +1408,8 @@ you want to get the actual element type, use __result_of_value_at_key__].
[*Return type]: Any type.
[*Precondition]: `has_key<Seq, Key>::type::value == true` (where `Seq` is not __unbounded_sequence__)
[*Semantics]: Returns the result of using __at_key__ to access the element with key type `Key` in `Seq`.
[heading Header]
@ -1371,6 +1448,8 @@ Returns the actual element type associated with a Key from the __sequence__.
[*Return type]: Any type.
[*Precondition]: `has_key<Seq, Key>::type::value == true` (where `Seq` is not __unbounded_sequence__)
[*Semantics]: Returns the actual element type associated with key type
`Key` in `Seq`.
@ -1381,7 +1460,7 @@ Returns the actual element type associated with a Key from the __sequence__.
[heading Example]
typedef __map__<__pair__<int, char>, __pair__<char, char>, __pair__<double, char> > mymap;
BOOST_MPL_ASSERT((boost::is_same<__result_of_at_key__<mymap, int>::type, char>));
BOOST_MPL_ASSERT((boost::is_same<__result_of_value_at_key__<mymap, int>::type, char>));
[endsect]
@ -1405,9 +1484,10 @@ Returns the return type of swap.
[heading Expression Semantics]
result_of::swap<Seq1, Seq2>::type
[*Return type]: `void`.
[*Return type]: `void` iff both of `Seq1` and `Seq2` are sequence.
Otherwise, none.
[*Semantics]: Always returns `void`.
[*Semantics]: Returns the return type of __swap__ for 2 sequences of types `Seq1` and `Seq2`.
[heading Header]
@ -1430,7 +1510,7 @@ operators for free.
The I/O operators: `<<` and `>>` work generically on all Fusion
sequences. The I/O operators are overloaded in namespace `boost::fusion`
[footnote __sequences__ and __views__ residing in different namespaces
[footnote __sequence__(s) and __views__ residing in different namespaces
will have to either provide their own I/O operators (possibly forwarding
to fusion's I/O operators) or hoist fusion's I/O operators (using
declaration), in their own namespaces for proper argument dependent
@ -1442,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:
@ -1478,7 +1568,7 @@ The code:
__vector__<int, int> j;
std::cin >> i;
std::cin >> set_open('[') >> set_close(']') >> set_delimiter(':');
std::cin >> tuple_open('[') >> tuple_close(']') >> tuple_delimiter(':');
std::cin >> j;
reads the data into the __vector__(s) `i` and `j`.
@ -1622,7 +1712,7 @@ compile time error.
[*Semantics]:
For each element, `e1`, in sequence `a`, and for each element, `e2`, in
sequence `b`, `e1 == e2` returns true. For any 2 zero length __sequence__s,
sequence `b`, `e1 == e2` returns true. For any 2 zero length __sequence__(s),
e and f, e == f returns true.
[heading Header]
@ -1887,6 +1977,91 @@ compile time error.
[endsect]
[section Hashing]
Automatically create a `boost::hash` conforming `hash_value` function.
[heading Synopsis]
template <typename Seq>
std::size_t
hash_value(Seq const& seq);
[heading Parameters]
[table
[[Parameter] [Requirement] [Description]]
[[`seq`] [Instance of __sequence__] [__sequence__ to compute hash value of]]
]
[*Return type]: `std::size_t`
[*Requirements]:
For each element `e` in sequence `seq`, `hash_value(seq)` is a valid expression
returning a type that is convertible to `std::size_t`.
[*Semantics]: Returns a combined hash value for all elements of `seq`.
[heading Header]
#include <boost/fusion/sequence/hash.hpp>
#include <boost/fusion/include/hash.hpp>
[heading Example]
#include <boost/fusion/include/equal_to.hpp>
#include <boost/fusion/include/hash.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/unordered_map.hpp>
void foo()
{
typedef boost::fusion::vector<int, std::string, char> Vec;
const Vec v = {42, "Hello World", 't'};
// Compute a hash value directly.
std::cout << "hash_value(v) = " << boost::fusion::hash_value(v) << '\n';
// Or use it to create an unordered_map.
boost::unordered_map<Vec, bool> map;
map[v] = true;
assert(map.size() == 1 && map.count(v) == 1);
}
[heading Example]
#include <boost/fusion/include/define_struct.hpp>
#include <boost/fusion/include/equal_to.hpp>
#include <boost/fusion/include/hash.hpp>
#include <boost/unordered_set.hpp>
// We would like to define a struct that we can form unordered_sets of.
BOOST_FUSION_DEFINE_STRUCT(
(demo), Key,
(bool, b)
(std::string, s)
(int, i)
)
namespace demo {
// Make operator== and hash_value ADL accessible.
using boost::fusion::operator==;
using boost::fusion::hash_value;
typedef boost::unordered_set<demo::Key> Set;
}
void foo()
{
demo::Set set;
demo::Key key;
assert(set.count(key) == 0);
}
[heading See also]
__boost_func_hash__
[endsect]
[endsect]
[endsect]

View File

@ -16,7 +16,7 @@ A couple of classes and metafunctions provide basic support for Fusion.
Metafunction that evaluates to `mpl::true_` if a certain type `T` is a
conforming Fusion __sequence__, `mpl::false_` otherwise. This may be
specialized to accomodate clients which provide Fusion conforming sequences.
specialized to accommodate clients which provide Fusion conforming sequences.
[heading Synopsis]
@ -70,7 +70,7 @@ conforming Fusion __view__, `mpl::false_` otherwise. A view is a
specialized sequence that does not actually contain data. Views hold
sequences which may be other views. In general, views are held by other
views by value, while non-views are held by other views by reference. `is_view`
may be specialized to accomodate clients providing Fusion conforming views.
may be specialized to accommodate clients providing Fusion conforming views.
[heading Synopsis]
@ -125,7 +125,7 @@ All conforming Fusion sequences and iterators have an associated tag type. The
purpose of the tag is to enable __tag_dispatching__ from __intrinsic__
functions to implementations appropriate for the type.
This metafunction may be specialized to accomodate clients providing Fusion
This metafunction may be specialized to accommodate clients providing Fusion
conforming sequences.
[heading Synopsis]
@ -227,6 +227,8 @@ And optionally from:
namespace boost { namespace fusion
{
struct associative_tag {};
struct unbounded_tag {};
}}
[*Semantics]: Establishes the conceptual classification of a particular
@ -254,7 +256,8 @@ Metafunction to apply __element_conversion__ to the full argument type.
It removes references to `const`, references to array types are kept, even
if the array is `const`. Reference wrappers are removed (see
__note_boost_ref__).
__note_ref_wrappers__)[footnote Since C++11, the standard reference wrappers
are also removed.].
[heading Header]

View File

@ -23,6 +23,21 @@ As such the fusion tuple type provides a lot of functionality beyond that requir
Currently tuple is basically a synonym for __vector__, although this may be changed
in future releases of fusion.
[heading Header]
#include <boost/fusion/tuple.hpp>
#include <boost/fusion/include/tuple.hpp>
#include <boost/fusion/tuple/tuple.hpp>
#include <boost/fusion/tuple/tuple_fwd.hpp>
#include <boost/fusion/include/tuple_fwd.hpp>
// for creation function
#include <boost/fusion/tuple/tuple_tie.hpp>
#include <boost/fusion/include/tuple_tie.hpp>
#include <boost/fusion/tuple/make_tuple.hpp>
#include <boost/fusion/include/make_tuple.hpp>
[heading Synopsis]
template<
typename T1 = __unspecified__,
@ -31,8 +46,6 @@ in future releases of fusion.
typename TN = __unspecified__>
class tuple;
/tuple.hpp>
[section Construction]
[heading Description]
@ -49,7 +62,7 @@ The __tr1__tuple__ type provides a default constructor, a constructor that takes
tuple();
[*Requirements]: Each `Ti` is default constructable.
[*Requirements]: Each `Ti` is default-constructible.
[*Semantics]: Default initializes each element of the tuple.
@ -61,7 +74,7 @@ The __tr1__tuple__ type provides a default constructor, a constructor that takes
tuple(const tuple& t);
[*Requirements]: Each `Ti` should be copy constructable.
[*Requirements]: Each `Ti` should be copy-constructible.
[*Semantics]: Copy constructs each element of `*this` with the corresponding element of `t`.
@ -77,21 +90,23 @@ The __tr1__tuple__ type provides a default constructor, a constructor that takes
[section Tuple creation functions]
[heading Description]
TR1 describes 2 utility functions for creating __tr1__tuple__s. `make_tuple` builds a tuple out of it's argument list, and `tie` builds a tuple of references to it's arguments. The details of these creation functions are described in this section.
TR1 describes 2 utility functions for creating __tr1__tuple__. `make_tuple` builds a tuple out of it's argument list, and `tie` builds a tuple of references to it's arguments. The details of these creation functions are described in this section.
[heading Specification]
template<typename T1, typename T2, ..., typename TN>
tuple<V1, V2, ..., VN> make_tuple(const T1& t1, const T2& t2, ..., const TN& tn);
tuple<V1, V2, ..., VN>
make_tuple(const T1& t1, const T2& t2, ..., const TN& tn);
Where `Vi` is `X&` if the cv-unqualified type `Ti` is `reference_wrapper<X>`, otherwise `Vi` is `Ti`.
[*Returns]: `tuple<V1, V2, ..., VN>(t1, t2, ..., tN)`
template<typename T1, typename T2, ..., typename TN>
tuple<T1&, T2&, ..., TN&> tie(T1& t1, T2& t2, ..., TN& tn);
tuple<T1&, T2&, ..., TN&>
tie(T1& t1, T2& t2, ..., TN& tn);
[*Returns]: tuple<T1&, T2&, ..., TN&>(t1, t2, ..., tN). When argument `ti` is `ignore`, assigning any value to the corresponding tuple element has has no effect.
[*Returns]: tuple<T1&, T2&, ..., TN&>(t1, t2, ..., tN). When argument `ti` is `ignore`, assigning any value to the corresponding tuple element has no effect.
[endsect]
@ -254,7 +269,7 @@ The __tr1__tuple__ interface is specified to provide uniform access to `std::pai
[*Type]: `T2`
[*Value]: Returns thetype of the second element of the pair
[*Value]: Returns the type of the second element of the pair
template<int I, typename T1, typename T2>
P& get(std::pair<T1, T2>& pr);

View File

@ -1,6 +1,7 @@
[/==============================================================================
Copyright (C) 2001-2011 Joel de Guzman
Copyright (C) 2006 Dan Marsden
Copyright (c) 2022 Denis Mikhailov
Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@ -93,10 +94,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 +271,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 +287,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 +309,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`.]]
]
@ -329,9 +329,7 @@ defined in __forward_sequence__.
The unary version of `transform_view` presents a view of its underlying
sequence given a unary function object or function pointer. The binary
version of `transform_view` presents a view of 2 underlying sequences,
given a binary function object or function pointer. The `transform_view`
inherits the traversal characteristics (see __traversal_concept__) of
its underlying sequence or sequences.
given a binary function object or function pointer.
[heading Header]
@ -365,7 +363,8 @@ its underlying sequence or sequences.
* __forward_sequence__, __bidirectional_sequence__ or
__random_access_sequence__ depending on the traversal characteristics (see
__traversal_concept__) of its underlying sequence.
__traversal_concept__) of its underlying sequence or sequences.
* __associative_sequence__ if underlying sequence implements the __associative_sequence__ model(available only with unary version of `transform_view`).
[variablelist Notation
[[`TV`] [A `transform_view` type]]
@ -382,9 +381,7 @@ __traversal_concept__) of its underlying sequence.
[heading Expression Semantics]
Semantics of an expression is defined only where it differs from, or is not
defined in __forward_sequence__, __bidirectional_sequence__ or
__random_access_sequence__ depending on the traversal characteristics (see
__traversal_concept__) of its underlying sequence or sequences.
defined in the implemented models.
[table
[[Expression] [Semantics]]
@ -484,7 +481,7 @@ defined in the implemented models.
[heading Description]
`nview` presents a view which iterates over a given __sequence__ in a specified order.
An `nview` is constructed from an arbitrary __sequence__ and a list of indicies specifying
An `nview` is constructed from an arbitrary __sequence__ and a list of indices specifying
the elements to iterate over.
[heading Header]
@ -494,7 +491,7 @@ the elements to iterate over.
[heading Synopsis]
template <typename Sequence, typename Indicies>
template <typename Sequence, typename Indices>
struct nview;
template <typename Sequence, int I1, int I2 = -1, ...>
@ -507,7 +504,7 @@ the elements to iterate over.
[[Parameter] [Description] [Default]]
[[`Sequence`] [An arbitrary Fusion __forward_sequence__]
[]]
[[`Indicies`] [A `mpl::vector_c<int, ...>` holding the indicies defining
[[`Indices`] [A `mpl::vector_c<int, ...>` holding the indices defining
the required iteration order.] []]
[[`I1`, `I2`, `I3`...] [A list of integers specifying the required
iteration order.] [`INT_MAX` for `I2`, `I3`...]]
@ -530,7 +527,7 @@ defined in __random_access_sequence__.
[table
[[Expression] [Semantics]]
[[`NV(s)`] [Creates an `nview` given a sequence and a list of indicies.]]
[[`NV(s)`] [Creates an `nview` given a sequence and a list of indices.]]
[[`NV(nv1)`] [Copy constructs an `nview` from another `nview`, `nv1`.]]
[[`nv1 = nv2`] [Assigns to an `nview`, `nv1`, from another `nview`, `nv2`.]]
]
@ -540,16 +537,15 @@ of the original Fusion __sequence__
[heading Example]
typedef __vector__<int, char, double> vec;
typedef mpl::vector_c<int, 2, 1, 0, 2, 0> indicies;
typedef mpl::vector_c<int, 2, 1, 0, 2, 0> indices;
vec v1(1, 'c', 2.0);
std::cout << nview<vec, indicies>(v1) << std::endl; // (2.0 c 1 2.0 1)
std::cout << nview<vec, indices>(v1) << std::endl; // (2.0 c 1 2.0 1)
std::cout << as_nview<2, 1, 1, 0>(v1) << std::endl; // (2.0 c c 1)
[endsect]
[section repetitive_view]
[heading Description]
@ -593,7 +589,7 @@ printing a `repetitive_view` to `std::cout` is not.
[[`RV(rv1)`] [] [Copy constructs an `repetitive_view` from another `repetitive_view`, `rv1`.]]
[[`rv1 = rv2`] [] [Assigns to a `repetitive_view`, `rv1`, from another `repetitive_view`, `rv2`.]]
[[`__begin__(rv)`] [__forward_iterator__] []]
[[`__end__(rv)`] [__forward_iterator__] [Creates an unreachable iterator (since the sequnce is infinite)]]
[[`__end__(rv)`] [__forward_iterator__] [Creates an unreachable iterator (since the sequence is infinite)]]
]
[heading Result Type Expressions]
@ -615,4 +611,114 @@ printing a `repetitive_view` to `std::cout` is not.
[endsect]
[section flatten_view]
[heading Description]
`flatten_view` presents a view which iterates over its elements recursively in depth-first order.
[heading Header]
#include <boost/fusion/view/flatten_view.hpp>
#include <boost/fusion/include/flatten_view.hpp>
[heading Synopsis]
template <typename Sequence>
struct flatten_view;
[heading Template parameters]
[table
[[Parameter] [Description] [Default]]
[[`Sequence`] [A __forward_sequence__] []]
]
[heading Model of]
* __forward_sequence__
[variablelist Notation
[[`F`] [A `flatten_view` type]]
[[`s`] [An instance of `Sequence`]]
[[`f`, `f2`] [Instances of `F`]]
]
[heading Expression Semantics]
Semantics of an expression is defined only where it differs from, or is not
defined in __forward_sequence__.
[table
[[Expression] [Semantics]]
[[`F(s)`] [Creates a `flatten_view` given sequence, `s`.]]
[[`F(f)`] [Copy constructs a `flatten_view` from another `flatten_view`, `f`.]]
[[`f = f2`] [Assigns to a `flatten_view`, `f`, from another `flatten_view`, `f2`.]]
]
[heading Example]
typedef __vector__<int, int, __vector__<int, int>, int> sequence_type;
sequence_type seq;
__flatten_view__<sequence_type> flattened(seq);
__copy__(__make_vector__(1, 2, 3, 4, 5), flattened);
assert(seq == __make_vector__(1, 2, __make_vector__(3, 4), 5));
[endsect]
[section identity_view]
[heading Description]
`identity_view` presents underlying sequence unchanged.
[heading Header]
#include <boost/fusion/view/identity_view.hpp>
#include <boost/fusion/include/identity_view.hpp>
[heading Synopsis]
template <typename Sequence>
struct identity_view;
[heading Template parameters]
[table
[[Parameter] [Description] [Default]]
[[`Sequence`] [A __forward_sequence__] []]
]
[heading Model of]
* A model of __forward_sequence__ if `Sequence` is a __forward_sequence__ else, __bidirectional_sequence__ if `Sequence` is a __bidirectional_sequence__
else, __random_access_sequence__ if `Sequence` is a __random_access_sequence__.
* __associative_sequence__ if `Sequence` implements the __associative_sequence__ model.
[variablelist Notation
[[`IV`] [An `identity_view` type]]
[[`s`] [An instance of `Sequence`]]
[[`iv`, `iv2`] [Instances of `identity_view`]]
]
[heading Expression Semantics]
Semantics of an expression is defined only where it differs from, or is not
defined in the implemented models.
[table
[[Expression] [Semantics]]
[[`IV(s)`] [Creates an `identity_view` given sequence, `s`.]]
[[`IV(iv)`] [Copy constructs an `identity_view` from another `identity_view`, `iv`.]]
[[`iv = iv2`] [Assigns to an `identity_view`, `iv`, from another `identity_view`, `iv2`.]]
]
[heading Example]
typedef __vector__<int, short, double> vector_type;
vector_type vec(2, 5, 3.3);
__identity_view__<vector_type> identity(vec);
std::cout << identity << std::endl; // (2 5 3.3)
[endsect]
[endsect]

View File

@ -46,7 +46,7 @@
#include <boost/mpl/max.hpp>
#include <boost/mpl/next.hpp>
#include <boost/ref.hpp>
#include <boost/core/ref.hpp>
#include <iostream>
#include <typeinfo>

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_ADAPTED_30122005_1420)
#define BOOST_FUSION_ADAPTED_30122005_1420
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt.hpp>
#include <boost/fusion/adapted/array.hpp>
#include <boost/fusion/adapted/boost_array.hpp>
@ -18,7 +19,7 @@
// The std_tuple_iterator adaptor only supports implementations
// using variadic templates
#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/fusion/adapted/std_tuple.hpp>
#endif

View File

@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_HPP
#define BOOST_FUSION_ADAPTED_ADT_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp>
#include <boost/fusion/adapted/adt/adapt_assoc_adt.hpp>
#include <boost/fusion/adapted/adt/adapt_adt_named.hpp>

View File

@ -2,6 +2,7 @@
Copyright (c) 2001-2009 Joel de Guzman
Copyright (c) 2009-2010 Hartmut Kaiser
Copyright (c) 2010-2011 Christopher Schmidt
Copyright (c) 2013-2014 Damien Buhl
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,17 +11,17 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_HPP
#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/empty.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/preprocessor/control/if.hpp>
#include <boost/preprocessor/comparison/less.hpp>
#include <boost/fusion/adapted/struct/detail/extension.hpp>
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
#include <boost/fusion/adapted/struct/detail/at_impl.hpp>
#include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
#include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
#include <boost/fusion/adapted/struct/detail/value_at_impl.hpp>
#include <boost/fusion/adapted/struct/detail/category_of_impl.hpp>
@ -31,17 +32,19 @@
#include <boost/fusion/adapted/struct/detail/deref_impl.hpp>
#include <boost/fusion/adapted/adt/detail/extension.hpp>
#include <boost/fusion/adapted/adt/detail/adapt_base.hpp>
#include <boost/fusion/adapted/adt/detail/adapt_base_attr_filler.hpp>
#define BOOST_FUSION_ADAPT_ADT_FILLER_0(A, B, C, D)\
((A, B, C, D)) BOOST_FUSION_ADAPT_ADT_FILLER_1
#define BOOST_FUSION_ADAPT_ADT_FILLER_1(A, B, C, D)\
((A, B, C, D)) BOOST_FUSION_ADAPT_ADT_FILLER_0
#define BOOST_FUSION_ADAPT_ADT_FILLER_0_END
#define BOOST_FUSION_ADAPT_ADT_FILLER_1_END
#define BOOST_FUSION_ADAPT_ADT_C(TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, ATTRIBUTE) \
BOOST_FUSION_ADAPT_ADT_C_BASE( \
TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, ATTRIBUTE, 4)
#define BOOST_FUSION_ADAPT_ADT_C( \
TEMPLATE_PARAMS_SEQ, NAME_SEQ, IS_VIEW, I, ATTRIBUTE) \
BOOST_FUSION_ADAPT_ADT_C_BASE( \
TEMPLATE_PARAMS_SEQ, \
NAME_SEQ, \
I, \
BOOST_PP_IIF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR(ATTRIBUTE), \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
BOOST_PP_LESS( \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), 4)) \
#define BOOST_FUSION_ADAPT_TPL_ADT(TEMPLATE_PARAMS_SEQ, NAME_SEQ , ATTRIBUTES) \
BOOST_FUSION_ADAPT_STRUCT_BASE( \

View File

@ -10,6 +10,7 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_NAMED_HPP
#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_NAMED_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_adt.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>

View File

@ -2,6 +2,7 @@
Copyright (c) 2001-2009 Joel de Guzman
Copyright (c) 2007 Dan Marsden
Copyright (c) 2010-2011 Christopher Schmidt
Copyright (c) 2013-2014 Damien Buhl
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,17 +11,16 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_HPP
#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/empty.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/preprocessor/control/if.hpp>
#include <boost/fusion/adapted/struct/detail/extension.hpp>
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
#include <boost/fusion/adapted/struct/detail/at_impl.hpp>
#include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
#include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
#include <boost/fusion/adapted/struct/detail/value_at_impl.hpp>
#include <boost/fusion/adapted/struct/detail/category_of_impl.hpp>
@ -34,25 +34,27 @@
#include <boost/fusion/adapted/struct/detail/value_of_data_impl.hpp>
#include <boost/fusion/adapted/adt/detail/extension.hpp>
#include <boost/fusion/adapted/adt/detail/adapt_base.hpp>
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(A, B, C, D, E)\
((A, B, C, D, E)) BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1(A, B, C, D, E)\
((A, B, C, D, E)) BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0_END
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1_END
#include <boost/fusion/adapted/adt/detail/adapt_base_assoc_attr_filler.hpp>
#define BOOST_FUSION_ADAPT_ASSOC_ADT_C( \
TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, ATTRIBUTE) \
TEMPLATE_PARAMS_SEQ, NAME_SEQ, IS_VIEW, I, ATTRIBUTE) \
\
BOOST_FUSION_ADAPT_ADT_C_BASE(TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,ATTRIBUTE,5) \
BOOST_FUSION_ADAPT_ADT_C_BASE( \
TEMPLATE_PARAMS_SEQ, \
NAME_SEQ, \
I, \
BOOST_PP_IIF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR(ATTRIBUTE), \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
BOOST_PP_LESS( \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), 5)) \
\
template< \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
> \
struct struct_assoc_key<BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ), I> \
{ \
typedef BOOST_PP_TUPLE_ELEM(5, 4, ATTRIBUTE) type; \
typedef BOOST_FUSION_ADAPT_ASSOC_ADT_WRAPPEDATTR_GET_KEY(ATTRIBUTE) type;\
};
#define BOOST_FUSION_ADAPT_ASSOC_TPL_ADT( \

View File

@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_NAMED_HPP
#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_NAMED_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_assoc_adt.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>

View File

@ -10,11 +10,21 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_DETAIL_ADAPT_BASE_HPP
#define BOOST_FUSION_ADAPTED_ADT_DETAIL_ADAPT_BASE_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/detail/adapt_auto.hpp>
#include <boost/fusion/adapted/struct/detail/adapt_is_tpl.hpp>
#include <boost/preprocessor/control/if.hpp>
#include <boost/preprocessor/control/expr_if.hpp>
#include <boost/preprocessor/seq/seq.hpp>
#include <boost/preprocessor/seq/elem.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/typeof/typeof.hpp>
#define BOOST_FUSION_ADAPT_ADT_GET_IDENTITY_TEMPLATE_IMPL(TEMPLATE_PARAMS_SEQ) \
typename detail::get_identity< \
@ -27,8 +37,65 @@
\
boost::remove_const<boost::remove_reference<lvalue>::type>::type
#define BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR(ATTRIBUTE, \
ATTRIBUTE_TUPLE_SIZE, DEDUCE_TYPE) \
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, \
BOOST_PP_IF(DEDUCE_TYPE, 0, 2), ATTRIBUTE)
#define BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_SETEXPR(ATTRIBUTE, \
ATTRIBUTE_TUPLE_SIZE, DEDUCE_TYPE) \
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, \
BOOST_PP_IF(DEDUCE_TYPE, 1, 3), ATTRIBUTE)
#ifdef BOOST_MSVC
# define BOOST_FUSION_DEDUCED_ATTR_TYPE(NAME_SEQ, ATTRIBUTE, \
ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
\
BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \
TEMPLATE_PARAMS_SEQ) \
\
struct deduced_attr_type { \
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
typedef \
BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \
typename) \
BOOST_TYPEOF( PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR( \
ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, 1)) type; \
};
#else
# define BOOST_FUSION_DEDUCED_ATTR_TYPE(NAME_SEQ, ATTRIBUTE, \
ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
struct deduced_attr_type { \
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
typedef BOOST_TYPEOF( PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR( \
ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, 1)) type; \
};
#endif
#define BOOST_FUSION_ADT_ATTRIBUTE_TYPEOF( \
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
\
BOOST_FUSION_DEDUCED_ATTR_TYPE( \
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
\
typedef \
BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \
typename) \
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) \
\
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, 0, ATTRIBUTE) type; \
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, 1, ATTRIBUTE) const_type;
#define BOOST_FUSION_ADAPT_ADT_C_BASE( \
TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,ATTRIBUTE,ATTRIBUTE_TUPEL_SIZE) \
TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,PREFIX, \
ATTRIBUTE,ATTRIBUTE_TUPLE_SIZE, DEDUCE_TYPE) \
\
template< \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
@ -38,27 +105,43 @@
, I \
> \
{ \
\
BOOST_PP_IF(DEDUCE_TYPE, \
BOOST_FUSION_ADT_ATTRIBUTE_TYPEOF, \
BOOST_FUSION_ADT_ATTRIBUTE_GIVENTYPE)( \
NAME_SEQ, \
ATTRIBUTE, \
ATTRIBUTE_TUPLE_SIZE, \
PREFIX, \
TEMPLATE_PARAMS_SEQ) \
\
template<class Val> \
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
static void \
boost_fusion_adapt_adt_impl_set( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj, \
Val const& val) \
{ \
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 3, ATTRIBUTE); \
PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_SETEXPR(ATTRIBUTE, \
ATTRIBUTE_TUPLE_SIZE, DEDUCE_TYPE); \
} \
\
static BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) \
BOOST_FUSION_GPU_ENABLED \
static type \
boost_fusion_adapt_adt_impl_get( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj) \
{ \
return BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 2, ATTRIBUTE); \
return PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR(ATTRIBUTE, \
ATTRIBUTE_TUPLE_SIZE, DEDUCE_TYPE); \
} \
\
static BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 1, ATTRIBUTE) \
BOOST_FUSION_GPU_ENABLED \
static const_type \
boost_fusion_adapt_adt_impl_get( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) const& obj) \
{ \
return BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 2, ATTRIBUTE); \
return PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR(ATTRIBUTE, \
ATTRIBUTE_TUPLE_SIZE, DEDUCE_TYPE); \
} \
}; \
\
@ -71,14 +154,21 @@
, true \
> \
{ \
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 1, ATTRIBUTE) type; \
typedef \
BOOST_PP_EXPR_IF(BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), typename) \
access::adt_attribute_access< \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
, I \
>::const_type type; \
\
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
explicit \
adt_attribute_proxy( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) const& o) \
: obj(&o) \
{} \
\
BOOST_FUSION_GPU_ENABLED \
type get() const \
{ \
return access::adt_attribute_access< \
@ -87,6 +177,7 @@
>::boost_fusion_adapt_adt_impl_get(*obj); \
} \
\
BOOST_FUSION_GPU_ENABLED \
operator type() const \
{ \
return get(); \
@ -104,8 +195,14 @@
, false \
> \
{ \
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) type; \
typedef \
BOOST_PP_EXPR_IF(BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), typename) \
access::adt_attribute_access< \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
, I \
>::type type; \
\
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
explicit \
adt_attribute_proxy( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& o) \
@ -113,6 +210,7 @@
{} \
\
template<class Val> \
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
adt_attribute_proxy& \
operator=(Val const& val) \
{ \
@ -123,6 +221,7 @@
return *this; \
} \
\
BOOST_FUSION_GPU_ENABLED \
type get() const \
{ \
return access::adt_attribute_access< \
@ -131,6 +230,7 @@
>::boost_fusion_adapt_adt_impl_get(*obj); \
} \
\
BOOST_FUSION_GPU_ENABLED \
operator type() const \
{ \
return get(); \
@ -147,7 +247,14 @@
, I \
> \
{ \
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) lvalue; \
typedef BOOST_PP_EXPR_IF(BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), \
typename) \
adt_attribute_proxy< \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
, I \
, false \
>::type lvalue; \
\
BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \
TEMPLATE_PARAMS_SEQ) \
\
@ -170,6 +277,7 @@
> \
type; \
\
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
static type \
call(Seq& obj) \
{ \

View File

@ -0,0 +1,64 @@
/*=============================================================================
Copyright (c) 2013-2014 Damien Buhl
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_ADAPTER_ADT_DETAIL_ADAPT_BASE_ASSOC_ATTR_FILLER_HPP
#define BOOST_FUSION_ADAPTER_ADT_DETAIL_ADAPT_BASE_ASSOC_ATTR_FILLER_HPP
#include <boost/config.hpp>
#include <boost/fusion/adapted/struct/detail/adapt_auto.hpp>
#include <boost/fusion/adapted/adt/detail/adapt_base_attr_filler.hpp>
#include <boost/mpl/aux_/preprocessor/token_equal.hpp>
#include <boost/preprocessor/config/config.hpp>
#include <boost/preprocessor/control/iif.hpp>
#include <boost/preprocessor/variadic/size.hpp>
#include <boost/preprocessor/arithmetic/dec.hpp>
#if BOOST_PP_VARIADICS
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(...) \
BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(__VA_ARGS__) \
BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1(...) \
BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(__VA_ARGS__) \
BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0
#define BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(...) \
((BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), (__VA_ARGS__)))
#else // BOOST_PP_VARIADICS
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(A, B, C, D, E) \
BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(A, B, C, D, E) \
BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1(A, B, C, D, E) \
BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(A, B, C, D, E) \
BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0
#define BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(A, B, C, D, E) \
BOOST_PP_IIF(BOOST_MPL_PP_TOKEN_EQUAL(auto, A), \
((3, (C,D,E))), \
((5, (A,B,C,D,E))) \
)
#endif // BOOST_PP_VARIADICS
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0_END
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1_END
#define BOOST_FUSION_ADAPT_ASSOC_ADT_WRAPPEDATTR_GET_KEY(ATTRIBUTE) \
BOOST_PP_TUPLE_ELEM( \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
BOOST_PP_DEC(BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE)), \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR(ATTRIBUTE))
#endif

View File

@ -0,0 +1,92 @@
/*=============================================================================
Copyright (c) 2013-2014 Damien Buhl
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_ADAPTED_ADT_DETAIL_ADAPT_BASE_ATTR_FILLER_HPP
#define BOOST_FUSION_ADAPTED_ADT_DETAIL_ADAPT_BASE_ATTR_FILLER_HPP
#include <boost/config.hpp>
#include <boost/fusion/adapted/struct/detail/adapt_auto.hpp>
#include <boost/fusion/adapted/struct/detail/preprocessor/is_seq.hpp>
#include <boost/mpl/aux_/preprocessor/token_equal.hpp>
#include <boost/preprocessor/arithmetic/dec.hpp>
#include <boost/preprocessor/control/iif.hpp>
#include <boost/preprocessor/logical/or.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/preprocessor/variadic/to_seq.hpp>
#include <boost/preprocessor/variadic/size.hpp>
#include <boost/preprocessor/variadic/elem.hpp>
#include <boost/preprocessor/seq/seq.hpp>
#include <boost/preprocessor/seq/rest_n.hpp>
#define BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE) \
BOOST_PP_TUPLE_ELEM(2, 0, ATTRIBUTE)
#define BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR(ATTRIBUTE) \
BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE)
#if BOOST_PP_VARIADICS
# define BOOST_FUSION_ADAPT_ADT_FILLER_0(...) \
BOOST_FUSION_ADAPT_ADT_FILLER(__VA_ARGS__) \
BOOST_FUSION_ADAPT_ADT_FILLER_1
# define BOOST_FUSION_ADAPT_ADT_FILLER_1(...) \
BOOST_FUSION_ADAPT_ADT_FILLER(__VA_ARGS__) \
BOOST_FUSION_ADAPT_ADT_FILLER_0
# define BOOST_FUSION_ADAPT_ADT_FILLER_0_END
# define BOOST_FUSION_ADAPT_ADT_FILLER_1_END
// MSVC don't compile when using BOOST_PP_BITOR instead of BOOST_PP_OR.
# define BOOST_FUSION_ADAPT_ADT_FILLER(...) \
BOOST_PP_IIF( \
BOOST_PP_OR( \
BOOST_MPL_PP_TOKEN_EQUAL(auto, \
BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__)), \
BOOST_MPL_PP_TOKEN_EQUAL(auto, \
BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__))), \
\
BOOST_FUSION_ADAPT_ADT_WRAP_ATTR( \
BOOST_PP_VARIADIC_ELEM(2, __VA_ARGS__), \
BOOST_FUSION_WORKAROUND_VARIADIC_EMPTINESS_LAST_ELEM(__VA_ARGS__) \
), \
BOOST_FUSION_ADAPT_ADT_WRAP_ATTR(__VA_ARGS__))
# define BOOST_FUSION_ADAPT_ADT_WRAP_ATTR(...) \
((BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), (__VA_ARGS__)))
# define BOOST_FUSION_WORKAROUND_VARIADIC_EMPTINESS_LAST_ELEM(...) \
BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REST_N( \
BOOST_PP_DEC(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)), \
BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)))
#else // BOOST_PP_VARIADICS
# define BOOST_FUSION_ADAPT_ADT_FILLER_0(A, B, C, D) \
BOOST_FUSION_ADAPT_ADT_WRAP_ATTR(A,B,C,D) \
BOOST_FUSION_ADAPT_ADT_FILLER_1
# define BOOST_FUSION_ADAPT_ADT_FILLER_1(A, B, C, D) \
BOOST_FUSION_ADAPT_ADT_WRAP_ATTR(A,B,C,D) \
BOOST_FUSION_ADAPT_ADT_FILLER_0
# define BOOST_FUSION_ADAPT_ADT_FILLER_0_END
# define BOOST_FUSION_ADAPT_ADT_FILLER_1_END
# define BOOST_FUSION_ADAPT_ADT_WRAP_ATTR(A, B, C, D) \
BOOST_PP_IIF(BOOST_MPL_PP_TOKEN_EQUAL(auto, A), \
((2, (C,D))), \
((4, (A,B,C,D))) \
)
#endif // BOOST_PP_VARIADICS
#endif

View File

@ -10,15 +10,32 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_DETAIL_EXTENSION_HPP
#define BOOST_FUSION_ADAPTED_ADT_DETAIL_EXTENSION_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/fusion/support/as_const.hpp>
#include <boost/fusion/adapted/struct/detail/extension.hpp>
namespace boost { namespace fusion { namespace detail
namespace boost { namespace fusion
{
template <typename T, typename Dummy>
struct get_identity
: remove_const<typename remove_reference<T>::type>
{};
}}}
namespace detail
{
template <typename T, typename Dummy>
struct get_identity
: remove_const<typename remove_reference<T>::type>
{};
}
namespace extension
{
// Overload as_const() to unwrap adt_attribute_proxy.
template <typename T, int N, bool Const>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
typename adt_attribute_proxy<T, N, Const>::type as_const(const adt_attribute_proxy<T, N, Const>& proxy)
{
return proxy.get();
}
}
}}
#endif

View File

@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_AT_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_AT_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/remove_extent.hpp>
@ -26,6 +27,7 @@ namespace boost { namespace fusion { namespace extension
add_reference<typename remove_extent<Seq>::type>::type
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{

View File

@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_BEGIN_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_BEGIN_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/basic_iterator.hpp>
namespace boost { namespace fusion { namespace extension
@ -30,6 +31,7 @@ namespace boost { namespace fusion { namespace extension
>
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{

View File

@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_DEREF_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_DEREF_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/remove_extent.hpp>
@ -28,6 +29,7 @@ namespace boost { namespace fusion { namespace extension
>::type
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(It const& it)
{

View File

@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_END_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_END_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/basic_iterator.hpp>
#include <boost/type_traits/rank.hpp>
#include <boost/type_traits/extent.hpp>
@ -32,6 +33,7 @@ namespace boost { namespace fusion { namespace extension
>
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{

View File

@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_IS_SEQUENCE_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_IS_SEQUENCE_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion { namespace extension

View File

@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_IS_VIEW_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_IS_VIEW_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion { namespace extension

View File

@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_SIZE_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_SIZE_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/rank.hpp>
#include <boost/type_traits/extent.hpp>

View File

@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_TAG_OF_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_TAG_OF_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of_fwd.hpp>
#include <cstddef>

View File

@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_VALUE_AT_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_VALUE_AT_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/remove_extent.hpp>
namespace boost { namespace fusion { namespace extension

View File

@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_VALUE_OF_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_VALUE_OF_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/remove_extent.hpp>
namespace boost { namespace fusion { namespace extension

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_BOOST_ARRAY_27122005_1035)
#define BOOST_FUSION_BOOST_ARRAY_27122005_1035
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_array/array_iterator.hpp>
#include <boost/fusion/adapted/boost_array/tag_of.hpp>
#include <boost/fusion/adapted/boost_array/detail/is_view_impl.hpp>

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_ARRAY_ITERATOR_26122005_2250)
#define BOOST_FUSION_ARRAY_ITERATOR_26122005_2250
#include <boost/fusion/support/config.hpp>
#include <cstddef>
#include <boost/config.hpp>
#include <boost/mpl/int.hpp>
@ -17,6 +18,11 @@
#include <boost/type_traits/is_const.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct random_access_traversal_tag;
@ -31,6 +37,7 @@ namespace boost { namespace fusion
typedef mpl::int_<Pos> index;
typedef Array array_type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
array_iterator(Array& a)
: array(a) {}
@ -55,6 +62,7 @@ namespace boost { namespace fusion
>::type
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const & it)
{
@ -69,6 +77,7 @@ namespace boost { namespace fusion
typedef typename Iterator::array_type array_type;
typedef array_iterator<array_type, index::value + N::value> type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@ -91,17 +100,27 @@ namespace boost { namespace fusion
>::type
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(I1 const&, I2 const&)
{
return type();
}
};
private:
array_iterator<Array, Pos>& operator=(array_iterator<Array, Pos> const&);
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{
template <typename Array, int Pos>
struct iterator_traits< ::boost::fusion::array_iterator<Array, Pos> >
{ };
}
#endif
#endif

View File

@ -8,12 +8,13 @@
#if !defined(BOOST_FUSION_AT_IMPL_27122005_1241)
#define BOOST_FUSION_AT_IMPL_27122005_1241
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/mpl/if.hpp>
namespace boost { namespace fusion {
struct boost_array_tag;
namespace extension
@ -32,6 +33,7 @@ namespace boost { namespace fusion {
typename Sequence::const_reference,
typename Sequence::reference>::type type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_BEGIN_IMPL_27122005_1117)
#define BOOST_FUSION_BEGIN_IMPL_27122005_1117
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_array/array_iterator.hpp>
namespace boost { namespace fusion {
@ -23,10 +24,11 @@ namespace boost { namespace fusion {
struct begin_impl<boost_array_tag>
{
template <typename Sequence>
struct apply
struct apply
{
typedef array_iterator<Sequence, 0> type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_27122005_1044)
#define BOOST_FUSION_CATEGORY_OF_IMPL_27122005_1044
#include <boost/fusion/support/config.hpp>
#include <boost/config/no_tr1/utility.hpp>
namespace boost { namespace fusion {

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_END_IMPL_27122005_1120)
#define BOOST_FUSION_END_IMPL_27122005_1120
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_array/array_iterator.hpp>
namespace boost { namespace fusion {
@ -23,10 +24,11 @@ namespace boost { namespace fusion {
struct end_impl<boost_array_tag>
{
template <typename Sequence>
struct apply
struct apply
{
typedef array_iterator<Sequence, Sequence::static_size> type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_27122005_1648)
#define BOOST_FUSION_IS_SEQUENCE_IMPL_27122005_1648
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion {

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_IS_VIEW_IMPL_27042006_2221)
#define BOOST_FUSION_IS_VIEW_IMPL_27042006_2221
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion

View File

@ -8,6 +8,7 @@
#if !defined(FUSION_SEQUENCE_TAG_OF_27122005_1030)
#define FUSION_SEQUENCE_TAG_OF_27122005_1030
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of_fwd.hpp>
#include <cstddef>

View File

@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_BOOST_TUPLE_09272006_0732)
#define BOOST_FUSION_BOOST_TUPLE_09272006_0732
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_tuple/tag_of.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp>
@ -16,5 +17,7 @@
#include <boost/fusion/adapted/boost_tuple/detail/size_impl.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/at_impl.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/convert_impl.hpp>
#include <boost/fusion/adapted/boost_tuple/mpl/clear.hpp>
#endif

View File

@ -7,6 +7,7 @@
#if !defined(FUSION_BOOST_TUPLE_ITERATOR_09262006_1851)
#define FUSION_BOOST_TUPLE_ITERATOR_09262006_1851
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/add_const.hpp>
@ -41,12 +42,23 @@ namespace boost { namespace fusion
struct boost_tuple_is_empty<tuples::tuple<> const> : mpl::true_ {};
}
template <typename Cons>
struct boost_tuple_iterator_identity;
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
template <typename Cons = tuples::null_type>
struct boost_tuple_iterator
: iterator_facade<boost_tuple_iterator<Cons>, forward_traversal_tag>
{
typedef Cons cons_type;
typedef boost_tuple_iterator_identity<
typename add_const<Cons>::type> identity;
BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons& in_cons)
: cons(in_cons) {}
Cons& cons;
@ -67,6 +79,7 @@ namespace boost { namespace fusion
>::type
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& iter)
{
@ -88,13 +101,14 @@ namespace boost { namespace fusion
>::type>
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& iter)
{
return type(iter.cons.get_tail());
}
};
template <typename I1, typename I2>
struct distance;
@ -111,7 +125,7 @@ namespace boost { namespace fusion
>::type
>::type type;
};
template <typename I1, typename I2>
struct distance
{
@ -120,7 +134,8 @@ namespace boost { namespace fusion
mpl::int_<0>,
lazy_next_distance<I1, I2>
>::type type;
BOOST_FUSION_GPU_ENABLED
static type
call(I1 const&, I2 const&)
{
@ -128,10 +143,14 @@ namespace boost { namespace fusion
}
};
private:
// silence MSVC warning C4512: assignment operator could not be generated
boost_tuple_iterator& operator= (boost_tuple_iterator const&);
template <typename I1, typename I2>
struct equal_to
: is_same<typename I1::identity, typename I2::identity>
{};
};
#ifdef _MSC_VER
# pragma warning(pop)
#endif
template <typename Null>
struct boost_tuple_null_iterator
@ -139,6 +158,9 @@ namespace boost { namespace fusion
{
typedef Null cons_type;
typedef boost_tuple_iterator_identity<
typename add_const<Null>::type> identity;
template <typename I1, typename I2>
struct equal_to
: mpl::or_<
@ -156,6 +178,7 @@ namespace boost { namespace fusion
: boost_tuple_null_iterator<tuples::null_type>
{
template <typename Cons>
BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons const&) {}
};
@ -164,6 +187,7 @@ namespace boost { namespace fusion
: boost_tuple_null_iterator<tuples::null_type const>
{
template <typename Cons>
BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons const&) {}
};
@ -172,6 +196,7 @@ namespace boost { namespace fusion
: boost_tuple_null_iterator<tuples::tuple<> >
{
template <typename Cons>
BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons const&) {}
};
@ -180,10 +205,20 @@ namespace boost { namespace fusion
: boost_tuple_null_iterator<tuples::tuple<> const>
{
template <typename Cons>
BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons const&) {}
};
}}
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{
template <typename Cons>
struct iterator_traits< ::boost::fusion::boost_tuple_iterator<Cons> >
{ };
}
#endif
#endif

View File

@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_AT_IMPL_09262006_1920)
#define BOOST_FUSION_AT_IMPL_09262006_1920
#include <boost/fusion/support/config.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/mpl/if.hpp>
@ -37,6 +38,7 @@ namespace boost { namespace fusion
>::type
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{

View File

@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_BEGIN_IMPL_09272006_0719)
#define BOOST_FUSION_BEGIN_IMPL_09272006_0719
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp>
namespace boost { namespace fusion
@ -26,6 +27,7 @@ namespace boost { namespace fusion
{
typedef boost_tuple_iterator<Sequence> type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{

View File

@ -0,0 +1,59 @@
/*=============================================================================
Copyright (c) 2012-2014 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)
==============================================================================*/
#if !defined(BOOST_FUSION_BUILD_CONS_10172012_0130)
#define BOOST_FUSION_BUILD_CONS_10172012_0130
#include <boost/tuple/tuple.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/iterator/deref.hpp>
namespace boost { namespace fusion { namespace detail
{
template <
typename First
, typename Last
, bool is_empty = result_of::equal_to<First, Last>::value>
struct build_tuple_cons;
template <typename First, typename Last>
struct build_tuple_cons<First, Last, true>
{
typedef boost::tuples::null_type type;
BOOST_FUSION_GPU_ENABLED
static type
call(First const&, Last const&)
{
return type();
}
};
template <typename First, typename Last>
struct build_tuple_cons<First, Last, false>
{
typedef
build_tuple_cons<typename result_of::next<First>::type, Last>
next_build_tuple_cons;
typedef boost::tuples::cons<
typename result_of::value_of<First>::type
, typename next_build_tuple_cons::type>
type;
BOOST_FUSION_GPU_ENABLED
static type
call(First const& f, Last const& l)
{
typename result_of::value_of<First>::type v = *f;
return type(v, next_build_tuple_cons::call(fusion::next(f), l));
}
};
}}}
#endif

View File

@ -0,0 +1,50 @@
/*=============================================================================
Copyright (c) 2012-2014 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)
==============================================================================*/
#if !defined(BOOST_FUSION_CONVERT_IMPL_10172012_0120)
#define BOOST_FUSION_CONVERT_IMPL_10172012_0120
#include <boost/tuple/tuple.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/build_cons.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
namespace boost { namespace fusion
{
struct boost_tuple_tag;
namespace extension
{
template <typename T>
struct convert_impl;
template <>
struct convert_impl<boost_tuple_tag>
{
template <typename Sequence>
struct apply
{
typedef typename
detail::build_tuple_cons<
typename result_of::begin<Sequence>::type
, typename result_of::end<Sequence>::type
>
build_tuple_cons;
typedef typename build_tuple_cons::type type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
return build_tuple_cons::call(fusion::begin(seq), fusion::end(seq));
}
};
};
}
}}
#endif

View File

@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_END_IMPL_09272006_0721)
#define BOOST_FUSION_END_IMPL_09272006_0721
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_const.hpp>
@ -41,6 +42,7 @@ namespace boost { namespace fusion
>
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{

View File

@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_09272006_0726)
#define BOOST_FUSION_IS_SEQUENCE_IMPL_09272006_0726
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion

View File

@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_IS_VIEW_IMPL_09272006_0725)
#define BOOST_FUSION_IS_VIEW_IMPL_09272006_0725
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion

View File

@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_SIZE_IMPL_09272006_0724)
#define BOOST_FUSION_SIZE_IMPL_09272006_0724
#include <boost/fusion/support/config.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/mpl/int.hpp>

View File

@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_VALUE_AT_IMPL_09262006_1926)
#define BOOST_FUSION_VALUE_AT_IMPL_09262006_1926
#include <boost/fusion/support/config.hpp>
#include <boost/tuple/tuple.hpp>
namespace boost { namespace fusion

View File

@ -0,0 +1,23 @@
/*=============================================================================
Copyright (c) 2012 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)
==============================================================================*/
#if !defined(BOOST_FUSION_CLEAR_10172012_0100)
#define BOOST_FUSION_CLEAR_10172012_0100
#include <boost/mpl/identity.hpp>
#include <boost/fusion/adapted/boost_tuple/tag_of.hpp>
namespace boost { namespace fusion { namespace detail {
template <typename Tag>
struct clear;
template <>
struct clear<boost_tuple_tag> : mpl::identity<boost::tuple<> > {};
}}}
#endif

View File

@ -7,6 +7,7 @@
#if !defined(BOOST_FUSION_TAG_OF_09262006_1900)
#define BOOST_FUSION_TAG_OF_09262006_1900
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of_fwd.hpp>
namespace boost { namespace tuples

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_MPL_31122005_1152)
#define BOOST_FUSION_MPL_31122005_1152
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/mpl/detail/begin_impl.hpp>
#include <boost/fusion/adapted/mpl/detail/end_impl.hpp>
#include <boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp>

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_AT_IMPL_31122005_1642)
#define BOOST_FUSION_AT_IMPL_31122005_1642
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/at.hpp>
namespace boost { namespace fusion
@ -27,6 +28,7 @@ namespace boost { namespace fusion
{
typedef typename mpl::at<Sequence, N>::type type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Sequence)
{

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_BEGIN_IMPL_31122005_1209)
#define BOOST_FUSION_BEGIN_IMPL_31122005_1209
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
#include <boost/mpl/begin.hpp>
#include <boost/type_traits/remove_const.hpp>
@ -32,6 +33,7 @@ namespace boost { namespace fusion {
>::type iterator;
typedef mpl_iterator<iterator> type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Sequence)
{

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141)
#define BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/mpl_iterator_category.hpp>
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/is_sequence.hpp>

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_EMPTY_IMPL_31122005_1554)
#define BOOST_FUSION_EMPTY_IMPL_31122005_1554
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/empty.hpp>
namespace boost { namespace fusion

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_END_IMPL_31122005_1237)
#define BOOST_FUSION_END_IMPL_31122005_1237
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
#include <boost/mpl/end.hpp>
#include <boost/type_traits/add_const.hpp>
@ -32,6 +33,7 @@ namespace boost { namespace fusion
>::type iterator;
typedef mpl_iterator<iterator> type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Sequence)
{

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_HAS_KEY_IMPL_31122005_1647)
#define BOOST_FUSION_HAS_KEY_IMPL_31122005_1647
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/has_key.hpp>
namespace boost { namespace fusion

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_31122005_1505)
#define BOOST_FUSION_IS_SEQUENCE_IMPL_31122005_1505
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_IS_VIEW_IMPL_03202006_0048)
#define BOOST_FUSION_IS_VIEW_IMPL_03202006_0048
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SIZE_IMPL_31122005_1508)
#define BOOST_FUSION_SIZE_IMPL_31122005_1508
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/size.hpp>
namespace boost { namespace fusion

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_VALUE_AT_IMPL_31122005_1621)
#define BOOST_FUSION_VALUE_AT_IMPL_31122005_1621
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/at.hpp>
namespace boost { namespace fusion

View File

@ -7,6 +7,7 @@
#if !defined(FUSION_MPL_ITERATOR_05052005_0731)
#define FUSION_MPL_ITERATOR_05052005_0731
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/mpl_iterator_category.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/type_traits/remove_const.hpp>
@ -37,6 +38,7 @@ namespace boost { namespace fusion
typename Iterator::iterator_type>::type
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Iterator)
{
@ -51,6 +53,7 @@ namespace boost { namespace fusion
typename mpl::next<typename Iterator::iterator_type>::type>
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Iterator)
{
@ -65,6 +68,7 @@ namespace boost { namespace fusion
typename mpl::prior<typename Iterator::iterator_type>::type>
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Iterator)
{
@ -79,6 +83,7 @@ namespace boost { namespace fusion
typename mpl::advance<typename Iterator::iterator_type, N>::type>
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& /*i*/)
{
@ -99,6 +104,7 @@ namespace boost { namespace fusion
>::type
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(I1 const&, I2 const&)
{
@ -108,6 +114,15 @@ namespace boost { namespace fusion
};
}}
#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408
namespace std
{
template <typename Iterator>
struct iterator_traits< ::boost::fusion::mpl_iterator<Iterator> >
{ };
}
#endif
#endif

View File

@ -0,0 +1,23 @@
/*=============================================================================
Copyright (c) 2013 Mateusz Loskot
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 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_STD_ARRAY__01062013_1700)
#define BOOST_FUSION_STD_ARRAY__01062013_1700
#include <boost/fusion/adapted/std_array/std_array_iterator.hpp>
#include <boost/fusion/adapted/std_array/tag_of.hpp>
#include <boost/fusion/adapted/std_array/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/std_array/detail/is_sequence_impl.hpp>
#include <boost/fusion/adapted/std_array/detail/category_of_impl.hpp>
#include <boost/fusion/adapted/std_array/detail/begin_impl.hpp>
#include <boost/fusion/adapted/std_array/detail/end_impl.hpp>
#include <boost/fusion/adapted/std_array/detail/size_impl.hpp>
#include <boost/fusion/adapted/std_array/detail/at_impl.hpp>
#include <boost/fusion/adapted/std_array/detail/value_at_impl.hpp>
#endif

View File

@ -0,0 +1,25 @@
/*=============================================================================
Copyright (c) 2013 Mateusz Loskot
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_STD_ARRAY_ARRAY_SIZE_01062013_1700)
#define BOOST_FUSION_STD_ARRAY_ARRAY_SIZE_01062013_1700
#include <cstddef>
#include <boost/type_traits/integral_constant.hpp>
namespace boost { namespace fusion
{
namespace extension
{
template<class T>
struct std_array_size;
template<template<typename, std::size_t> class Array, typename T, std::size_t N>
struct std_array_size<Array<T, N> > : boost::integral_constant<std::size_t, N> {};
}
}}
#endif

View File

@ -0,0 +1,45 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 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_STD_ARRAY_AT_IMPL_01062013_1700)
#define BOOST_FUSION_STD_ARRAY_AT_IMPL_01062013_1700
#include <boost/type_traits/is_const.hpp>
#include <boost/mpl/if.hpp>
namespace boost { namespace fusion {
struct std_array_tag;
namespace extension
{
template<typename T>
struct at_impl;
template<>
struct at_impl<std_array_tag>
{
template<typename Sequence, typename N>
struct apply
{
typedef typename mpl::if_<
is_const<Sequence>,
typename Sequence::const_reference,
typename Sequence::reference>::type type;
static type
call(Sequence& seq)
{
return seq[N::value];
}
};
};
}
}}
#endif

View File

@ -0,0 +1,41 @@
/*=============================================================================
Copyright (c) 2013 Mateusz Loskot
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 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_STD_ARRAY_BEGIN_OF_IMPL_01062013_1700)
#define BOOST_FUSION_STD_ARRAY_BEGIN_OF_IMPL_01062013_1700
#include <boost/fusion/adapted/std_array/std_array_iterator.hpp>
namespace boost { namespace fusion {
struct std_array_tag;
namespace extension
{
template<typename T>
struct begin_impl;
template <>
struct begin_impl<std_array_tag>
{
template <typename Sequence>
struct apply
{
typedef std_array_iterator<Sequence, 0> type;
static type
call(Sequence& v)
{
return type(v);
}
};
};
}
}}
#endif

View File

@ -0,0 +1,35 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 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_STD_ARRAY_CATEGORY_OF_IMPL_01062013_1700)
#define BOOST_FUSION_STD_ARRAY_CATEGORY_OF_IMPL_01062013_1700
#include <boost/config/no_tr1/utility.hpp>
namespace boost { namespace fusion {
struct std_array_tag;
struct random_access_traversal_tag;
namespace extension
{
template<typename T>
struct category_of_impl;
template<>
struct category_of_impl<std_array_tag>
{
template<typename T>
struct apply
{
typedef random_access_traversal_tag type;
};
};
}
}}
#endif

View File

@ -0,0 +1,45 @@
/*=============================================================================
Copyright (c) 2013 Mateusz Loskot
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 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_STD_ARRAY_END_OF_IMPL_01062013_1700)
#define BOOST_FUSION_STD_ARRAY_END_OF_IMPL_01062013_1700
#include <boost/fusion/adapted/std_array/std_array_iterator.hpp>
#include <boost/fusion/adapted/std_array/detail/array_size.hpp>
#include <boost/type_traits/remove_const.hpp>
namespace boost { namespace fusion {
struct std_array_tag;
namespace extension
{
template <typename Tag>
struct end_impl;
template <>
struct end_impl<std_array_tag>
{
template <typename Sequence>
struct apply
{
typedef typename remove_const<Sequence>::type seq_type;
static int const size = std_array_size<seq_type>::value;
typedef std_array_iterator<Sequence, size> type;
static type
call(Sequence& v)
{
return type(v);
}
};
};
}
}}
#endif

View File

@ -0,0 +1,32 @@
/*=============================================================================
Copyright (c) 2013 Mateusz Loskot
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 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_STD_ARRAY_IS_SEQUENCE_IMPL_01062013_1700)
#define BOOST_FUSION_STD_ARRAY_IS_SEQUENCE_IMPL_01062013_1700
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion {
struct std_array_tag;
namespace extension
{
template<typename Tag>
struct is_sequence_impl;
template<>
struct is_sequence_impl<std_array_tag>
{
template<typename Sequence>
struct apply : mpl::true_ {};
};
}
}}
#endif

View File

@ -0,0 +1,33 @@
/*=============================================================================
Copyright (c) 2013 Mateusz Loskot
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 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_STD_ARRAY_IS_VIEW_IMPL_01062013_1700)
#define BOOST_FUSION_STD_ARRAY_IS_VIEW_IMPL_01062013_1700
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion
{
struct std_array_tag;
namespace extension
{
template<typename Tag>
struct is_view_impl;
template<>
struct is_view_impl<std_array_tag>
{
template<typename T>
struct apply : mpl::false_
{};
};
}
}}
#endif

View File

@ -0,0 +1,41 @@
/*=============================================================================
Copyright (c) 2013 Mateusz Loskot
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 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_STD_ARRAY_SIZE_IMPL_01062013_1700)
#define BOOST_FUSION_STD_ARRAY_SIZE_IMPL_01062013_1700
#include <boost/fusion/adapted/std_array/detail/array_size.hpp>
#include <boost/type_traits/remove_const.hpp>
namespace boost { namespace fusion {
struct std_array_tag;
namespace extension
{
template<typename T>
struct size_impl;
template<>
struct size_impl<std_array_tag>
{
template<typename Sequence>
struct apply
: mpl::int_
<
std_array_size
<
typename remove_const<Sequence>::type
>::value
>
{};
};
}
}}
#endif

View File

@ -0,0 +1,32 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 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_STD_ARRAY_VALUE_AT_IMPL_01062013_1700)
#define BOOST_FUSION_STD_ARRAY_VALUE_AT_IMPL_01062013_1700
namespace boost { namespace fusion {
struct std_array_tag;
namespace extension
{
template<typename T>
struct value_at_impl;
template <>
struct value_at_impl<std_array_tag>
{
template <typename Sequence, typename N>
struct apply
{
typedef typename Sequence::value_type type;
};
};
}
}}
#endif

View File

@ -0,0 +1,114 @@
/*=============================================================================
Copyright (c) 2013 Mateusz Loskot
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 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_STD_ARRAY_ARRAY_ITERATOR_01062013_1700)
#define BOOST_FUSION_STD_ARRAY_ARRAY_ITERATOR_01062013_1700
#include <cstddef>
#include <boost/config.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/minus.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/fusion/adapted/std_array/detail/array_size.hpp>
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4512) // assignment operator could not be generated.
#endif
namespace boost { namespace fusion
{
struct random_access_traversal_tag;
template <typename Array, int Pos>
struct std_array_iterator
: iterator_facade<std_array_iterator<Array, Pos>, random_access_traversal_tag>
{
BOOST_MPL_ASSERT_RELATION(Pos, >=, 0);
BOOST_MPL_ASSERT_RELATION(Pos, <=, std::tuple_size<Array>::value);
typedef mpl::int_<Pos> index;
typedef Array array_type;
std_array_iterator(Array& a)
: array(a) {}
Array& array;
template <typename Iterator>
struct value_of
{
typedef typename Iterator::array_type array_type;
typedef typename array_type::value_type type;
};
template <typename Iterator>
struct deref
{
typedef typename Iterator::array_type array_type;
typedef typename
mpl::if_<
is_const<array_type>
, typename array_type::const_reference
, typename array_type::reference
>::type
type;
static type
call(Iterator const & it)
{
return it.array[Iterator::index::value];
}
};
template <typename Iterator, typename N>
struct advance
{
typedef typename Iterator::index index;
typedef typename Iterator::array_type array_type;
typedef std_array_iterator<array_type, index::value + N::value> type;
static type
call(Iterator const& i)
{
return type(i.array);
}
};
template <typename Iterator>
struct next : advance<Iterator, mpl::int_<1> > {};
template <typename Iterator>
struct prior : advance<Iterator, mpl::int_<-1> > {};
template <typename I1, typename I2>
struct distance : mpl::minus<typename I2::index, typename I1::index>
{
typedef typename
mpl::minus<
typename I2::index, typename I1::index
>::type
type;
static type
call(I1 const&, I2 const&)
{
return type();
}
};
};
}}
#ifdef _MSC_VER
# pragma warning(pop)
#endif
#endif

View File

@ -0,0 +1,52 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005-2006 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_STD_ARRAY_TAG_OF_01062013_1700)
#define BOOST_FUSION_STD_ARRAY_TAG_OF_01062013_1700
#include <boost/fusion/support/tag_of_fwd.hpp>
#include <array>
#include <cstddef>
namespace boost { namespace fusion
{
struct std_array_tag;
struct fusion_sequence_tag;
namespace traits
{
template<typename T, std::size_t N>
#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
struct tag_of<std::array<T,N>, void >
#else
struct tag_of<std::array<T,N> >
#endif
{
typedef std_array_tag type;
};
}
}}
namespace boost { namespace mpl
{
template<typename>
struct sequence_tag;
template<typename T, std::size_t N>
struct sequence_tag<std::array<T,N> >
{
typedef fusion::fusion_sequence_tag type;
};
template<typename T, std::size_t N>
struct sequence_tag<std::array<T,N> const>
{
typedef fusion::fusion_sequence_tag type;
};
}}
#endif

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