From 00ac706ad8f8de8a937ffddbca0034545cb0fba5 Mon Sep 17 00:00:00 2001 From: CromwellEnage <32967088+CromwellEnage@users.noreply.github.com> Date: Wed, 7 Nov 2018 10:30:26 -0500 Subject: [PATCH] Reinstate C++03 workarounds Resolve merge conflicts arising from merging PR#23 into boostorg:develop. --- .travis.yml | 160 +- appveyor.yml | 19 +- doc/html/index.html | 120 +- doc/html/reference.html | 1152 ++++++++++- doc/index.rst | 117 +- doc/reference.rst | 745 ++++++- include/boost/parameter.hpp | 3 + include/boost/parameter/aux_/arg_list.hpp | 420 +++- include/boost/parameter/aux_/as_lvalue.hpp | 25 + include/boost/parameter/aux_/default.hpp | 10 +- .../parameter/aux_/is_tagged_argument.hpp | 37 + .../parameter/aux_/pack/make_arg_list.hpp | 3 +- .../aux_/pack/tag_keyword_arg_ref.hpp | 61 + .../parameter/aux_/pp_impl/argument_pack.hpp | 44 +- .../boost/parameter/aux_/pp_impl/match.hpp | 31 + .../aux_/pp_impl/unwrap_predicate.hpp | 3 +- .../aux_/preprocessor/binary_seq_for_each.hpp | 1638 +++++++++++++++ .../preprocessor/binary_seq_for_each_inc.hpp | 1796 ++++++++++++++++ .../aux_/preprocessor/binary_seq_to_args.hpp | 65 + .../aux_/preprocessor/convert_binary_seq.hpp | 57 + .../parameter/aux_/preprocessor/for_each.hpp | 105 +- .../aux_/preprocessor/for_each_pred.hpp | 1029 ++++++++++ .../aux_/preprocessor/impl/flatten.hpp | 201 +- .../aux_/preprocessor/impl/for_each.hpp | 152 ++ .../impl/forwarding_overloads.hpp | 254 ++- .../aux_/preprocessor/impl/function_cast.hpp | 281 ++- .../impl/function_dispatch_layer.hpp | 61 +- .../impl/function_forward_match.hpp | 14 +- .../aux_/preprocessor/inc_binary_seq.hpp | 78 + .../parameter/aux_/preprocessor/is_binary.hpp | 1 + .../aux_/preprocessor/is_nullary.hpp | 1 + .../no_perfect_forwarding_begin.hpp | 165 ++ .../no_perfect_forwarding_end.hpp | 24 + .../parameter/aux_/preprocessor/overloads.hpp | 92 + .../parameter/aux_/preprocessor/seq_enum.hpp | 26 + .../parameter/aux_/preprocessor/seq_merge.hpp | 1807 +++++++++++++++++ include/boost/parameter/aux_/set.hpp | 113 +- include/boost/parameter/aux_/tag.hpp | 67 +- .../boost/parameter/aux_/tagged_argument.hpp | 410 ++-- .../parameter/aux_/tagged_argument_fwd.hpp | 8 + .../boost/parameter/aux_/template_keyword.hpp | 31 +- .../parameter/aux_/unwrap_cv_reference.hpp | 2 +- include/boost/parameter/config.hpp | 43 +- include/boost/parameter/keyword.hpp | 208 +- include/boost/parameter/macros.hpp | 97 + include/boost/parameter/match.hpp | 73 +- include/boost/parameter/parameters.hpp | 319 +++ include/boost/parameter/preprocessor.hpp | 23 +- test/Jamfile.v2 | 424 +++- test/basics.cpp | 22 +- test/basics.hpp | 6 + test/compose.cpp | 37 +- test/deduced.hpp | 20 + test/earwicker.cpp | 7 + test/evaluate_category.cpp | 51 + test/evaluate_category.hpp | 10 +- test/evaluate_category_10.cpp | 66 + test/evaluate_category_16.cpp | 54 + test/literate/extracting-parameter-types0.cpp | 19 + test/macros_eval_category.cpp | 61 + test/normalized_argument_types.cpp | 7 + test/ntp.cpp | 5 + test/optional_deduced_sfinae.cpp | 1 - test/preprocessor.cpp | 22 +- test/preprocessor_deduced.cpp | 13 +- test/preprocessor_eval_cat_8.cpp | 35 +- test/preprocessor_eval_category.cpp | 107 +- test/sfinae.cpp | 19 +- 68 files changed, 12286 insertions(+), 891 deletions(-) create mode 100755 include/boost/parameter/aux_/as_lvalue.hpp create mode 100755 include/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp create mode 100755 include/boost/parameter/aux_/preprocessor/binary_seq_for_each.hpp create mode 100755 include/boost/parameter/aux_/preprocessor/binary_seq_for_each_inc.hpp create mode 100755 include/boost/parameter/aux_/preprocessor/binary_seq_to_args.hpp create mode 100755 include/boost/parameter/aux_/preprocessor/convert_binary_seq.hpp mode change 100644 => 100755 include/boost/parameter/aux_/preprocessor/for_each.hpp create mode 100755 include/boost/parameter/aux_/preprocessor/for_each_pred.hpp create mode 100755 include/boost/parameter/aux_/preprocessor/impl/for_each.hpp create mode 100755 include/boost/parameter/aux_/preprocessor/inc_binary_seq.hpp create mode 100755 include/boost/parameter/aux_/preprocessor/no_perfect_forwarding_begin.hpp create mode 100755 include/boost/parameter/aux_/preprocessor/no_perfect_forwarding_end.hpp create mode 100755 include/boost/parameter/aux_/preprocessor/overloads.hpp create mode 100755 include/boost/parameter/aux_/preprocessor/seq_enum.hpp create mode 100755 include/boost/parameter/aux_/preprocessor/seq_merge.hpp mode change 100644 => 100755 include/boost/parameter/aux_/set.hpp mode change 100644 => 100755 include/boost/parameter/aux_/unwrap_cv_reference.hpp mode change 100644 => 100755 include/boost/parameter/match.hpp mode change 100644 => 100755 include/boost/parameter/preprocessor.hpp mode change 100644 => 100755 test/basics.cpp mode change 100644 => 100755 test/basics.hpp mode change 100644 => 100755 test/compose.cpp mode change 100644 => 100755 test/deduced.hpp mode change 100644 => 100755 test/earwicker.cpp mode change 100644 => 100755 test/literate/extracting-parameter-types0.cpp mode change 100644 => 100755 test/normalized_argument_types.cpp mode change 100644 => 100755 test/ntp.cpp mode change 100644 => 100755 test/optional_deduced_sfinae.cpp mode change 100644 => 100755 test/preprocessor.cpp mode change 100644 => 100755 test/preprocessor_deduced.cpp mode change 100644 => 100755 test/sfinae.cpp diff --git a/.travis.yml b/.travis.yml index d38d999..d6cc3b9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,7 +27,45 @@ matrix: include: - os: linux - env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=11 TEST_SUITE=parameter_all_tests + compiler: g++-4.4 + env: TOOLSET=gcc COMPILER=g++-4.4 CXXSTD=98,0x TEST_SUITE=parameter_all_tests + addons: + apt: + packages: + - g++-4.4 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: g++-4.6 + env: TOOLSET=gcc COMPILER=g++-4.6 CXXSTD=03,0x TEST_SUITE=parameter_all_tests + addons: + apt: + packages: + - g++-4.6 + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=03,11 TEST_SUITE=parameter_all_tests + addons: + apt: + packages: + - g++-4.7 + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=03,11 TEST_SUITE=parameter_all_tests_except_preproc_eval_cat_8 + addons: + apt: + packages: + - g++-4.8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=03,11 TEST_SUITE=parameter_all_tests_except_preproc_eval_cat_8 addons: apt: packages: @@ -36,7 +74,7 @@ matrix: - ubuntu-toolchain-r-test - os: linux - env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=11,14 TEST_SUITE=parameter_all_tests + env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=03,11,14 TEST_SUITE=parameter_all_tests addons: apt: packages: @@ -44,6 +82,15 @@ matrix: sources: - ubuntu-toolchain-r-test + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=03 TEST_SUITE=parameter_all_tests_except_preproc_eval_cat_8 + addons: + apt: + packages: + - g++-6 + sources: + - ubuntu-toolchain-r-test + - os: linux env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=11,14,1z TEST_SUITE=parameter_all_tests addons: @@ -53,6 +100,15 @@ matrix: sources: - ubuntu-toolchain-r-test + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=03 CXXSTD_DIALECT=cxxstd-dialect=gnu TEST_SUITE=parameter_all_tests_except_preproc_eval_cat_8 + addons: + apt: + packages: + - g++-6 + sources: + - ubuntu-toolchain-r-test + - os: linux env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=11,14,1z CXXSTD_DIALECT=cxxstd-dialect=gnu TEST_SUITE=parameter_all_tests addons: @@ -62,6 +118,17 @@ matrix: sources: - ubuntu-toolchain-r-test + - os: linux + dist: trusty + compiler: g++-7 + env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=03 TEST_SUITE=parameter_all_tests_except_preproc_eval_cat_8 + addons: + apt: + packages: + - g++-7 + sources: + - ubuntu-toolchain-r-test + - os: linux dist: trusty compiler: g++-7 @@ -73,6 +140,17 @@ matrix: sources: - ubuntu-toolchain-r-test + - os: linux + dist: trusty + compiler: g++-7 + env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=03 CXXSTD_DIALECT=cxxstd-dialect=gnu TEST_SUITE=parameter_all_tests_except_preproc_eval_cat_8 + addons: + apt: + packages: + - g++-7 + sources: + - ubuntu-toolchain-r-test + - os: linux dist: trusty compiler: g++-7 @@ -84,6 +162,16 @@ matrix: sources: - ubuntu-toolchain-r-test + - os: linux + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=03 TEST_SUITE=parameter_all_tests_except_preproc_eval_cat_8 + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + - os: linux compiler: g++-8 env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=11,14,17 TEST_SUITE=parameter_all_tests @@ -95,7 +183,7 @@ matrix: - ubuntu-toolchain-r-test - os: linux - env: TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=11 TEST_SUITE=parameter_all_tests + env: TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=03,11 TEST_SUITE=parameter_all_tests addons: apt: packages: @@ -105,7 +193,7 @@ matrix: - llvm-toolchain-precise-3.5 - os: linux - env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=11 TEST_SUITE=parameter_all_tests + env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=03,11 TEST_SUITE=parameter_all_tests addons: apt: packages: @@ -115,7 +203,7 @@ matrix: - llvm-toolchain-precise-3.6 - os: linux - env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=11 TEST_SUITE=parameter_all_tests + env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=03,11 TEST_SUITE=parameter_all_tests addons: apt: packages: @@ -124,6 +212,16 @@ matrix: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.7 + - os: linux + env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=03 TEST_SUITE=parameter_all_tests_cxx03 + addons: + apt: + packages: + - clang-3.8 + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-precise-3.8 + - os: linux env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=11 TEST_SUITE=parameter_all_tests addons: @@ -144,6 +242,16 @@ matrix: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.8 + - os: linux + env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=03 TEST_SUITE=parameter_all_tests_cxx03 + addons: + apt: + packages: + - clang-3.9 + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-precise-3.9 + - os: linux env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=11 TEST_SUITE=parameter_all_tests addons: @@ -164,6 +272,17 @@ matrix: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.9 + - os: linux + compiler: clang++-4.0 + env: TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=03 TEST_SUITE=parameter_all_tests_cxx03 + addons: + apt: + packages: + - clang-4.0 + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-trusty-4.0 + - os: linux compiler: clang++-4.0 env: TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=11 TEST_SUITE=parameter_all_tests @@ -186,6 +305,17 @@ matrix: - ubuntu-toolchain-r-test - llvm-toolchain-trusty-4.0 + - os: linux + compiler: clang++-5.0 + env: TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=03 TEST_SUITE=parameter_all_tests_cxx03 + addons: + apt: + packages: + - clang-5.0 + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-trusty-5.0 + - os: linux compiler: clang++-5.0 env: TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=11 TEST_SUITE=parameter_all_tests @@ -208,6 +338,16 @@ matrix: - ubuntu-toolchain-r-test - llvm-toolchain-trusty-5.0 + - os: linux + compiler: clang++ + env: TOOLSET=clang COMPILER=clang++ CXXSTD=03 TEST_SUITE=parameter_all_tests_cxx03 + addons: + apt: + packages: + - libstdc++-5-dev + sources: + - ubuntu-toolchain-r-test + - os: linux compiler: clang++ env: TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1z TEST_SUITE=parameter_all_tests @@ -220,7 +360,7 @@ matrix: - os: linux compiler: clang++-libc++ - env: TOOLSET=clang COMPILER=clang++-libc++ CXXSTD=11,14,1z TEST_SUITE=parameter_all_tests + env: TOOLSET=clang COMPILER=clang++-libc++ CXXSTD=03,11,14,1z TEST_SUITE=parameter_all_tests addons: apt: packages: @@ -228,14 +368,18 @@ matrix: - os: osx compiler: clang++ - env: TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1z TEST_SUITE=parameter_all_tests + env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z TEST_SUITE=parameter_all_tests + + - os: osx + env: TOOLSET=clang COMPILER=clang++ CXXSTD=03 TEST_SUITE=parameter_slp_tests + osx_image: xcode7.3 - os: osx env: TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1z TEST_SUITE=parameter_all_tests osx_image: xcode7.3 - os: osx - env: TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1z TEST_SUITE=parameter_all_but_python_tests + env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z TEST_SUITE=parameter_all_but_python_tests osx_image: xcode8.3 install: diff --git a/appveyor.yml b/appveyor.yml index 6bea0af..e9f9f6b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -15,12 +15,27 @@ branches: environment: matrix: + - ARGS: --toolset=gcc address-model=32 + TEST_SUITE: parameter_slp_tests + PATH: C:\mingw-w64\i686-5.3.0-posix-dwarf-rt_v4-rev0\mingw32\bin;%PATH% + - ARGS: --toolset=gcc address-model=32 linkflags=-Wl,-allow-multiple-definition + TEST_SUITE: parameter_slp_tests + PATH: C:\MinGW\bin;%PATH% - ARGS: --toolset=gcc address-model=64 - TEST_SUITE: parameter_all_but_python_tests + TEST_SUITE: parameter_sl_tests PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% - ARGS: --toolset=gcc address-model=64 cxxflags=-std=gnu++1z - TEST_SUITE: parameter_all_but_python_tests + TEST_SUITE: parameter_sl_tests PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 + ARGS: --toolset=msvc-9.0 address-model=32 + TEST_SUITE: parameter_all_tests + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 + ARGS: --toolset=msvc-10.0 address-model=32 + TEST_SUITE: parameter_all_tests + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 + ARGS: --toolset=msvc-11.0 address-model=32 + TEST_SUITE: parameter_msvc11_tests - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 ARGS: --toolset=msvc-12.0 address-model=32 TEST_SUITE: parameter_msvc_tests diff --git a/doc/html/index.html b/doc/html/index.html index bd23d51..d2cba52 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -184,19 +184,27 @@ id="id38">4.3 Documentation
If your compiler supports perfect forwarding, then the Parameter library will +#define the macro +BOOST_PARAMETER_HAS_PERFECT_FORWARDING +unless you disable it manually. If your compiler does not provide this +support, then parameter::parameters::operator() will treat rvalue references as lvalue +const references to work around the forwarding problem, so in certain cases you must wrap +boost::ref or +std::ref around any arguments that will +be bound to out parameters. The test/evaluate_category.cpp and +test/preprocessor_eval_category.cpp test programs demonstrate this +support.
+Some older compilers don't support SFINAE. If your compiler meets +that criterion, then Boost headers will +#define the preprocessor symbol +BOOST_NO_SFINAE, and parameter-enabled +functions won't be removed from the overload set based on their +signatures.
+If you use Microsoft Visual C++ 6.x, you may find that the compiler has +trouble finding your keyword objects. This problem has been observed, but +only on this one compiler, and it disappeared as the test code evolved, so we +suggest you use it only as a last resort rather than as a preventative +measure. The solution is to add using-declarations to force the +names to be available in the enclosing namespace without qualification:
+
+namespace graphs {
+
+ using graphs::graph;
+ using graphs::visitor;
+ using graphs::root_vertex;
+ using graphs::index_map;
+ using graphs::color_map;
+}
+
+The authors would like to thank all the Boosters who participated in the review of this library and its documentation, most especially our review @@ -2721,6 +2790,33 @@ to Herb Sutter.
+| [7] | +This capability depends on your compiler's support for +SFINAE. SFINAE: Substitution +Failure Is Not +An Error. If type substitution during the +instantiation of a function template results in an invalid type, no +compilation error is emitted; instead the overload is removed from the +overload set. By producing an invalid type in the function signature +depending on the result of some condition, we can decide whether or not an +overload is considered during overload resolution. The technique is +formalized in the enable_if utility. Most recent compilers support SFINAE; on +compilers that don't support it, the Boost config library will +#define the symbol +BOOST_NO_SFINAE. See +http://www.semantics.org/once_weakly/w02_SFINAE.pdf for more information +on SFINAE. | +
In a specification of the tokens generated by a macro, bold type is used to highlight the position of the expanded macro argument in the result.
+The special character β represents the value of +BOOST_PARAMETER_MAX_ARITY.
If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is +#defined, then:
template <typename Tag>
struct keyword
@@ -508,8 +523,8 @@ class="docutils literal">enable_if<
typename boost::mpl::eval_if<
- std::is_scalar<T>
, boost::mpl::true_
, boost::mpl::eval_if<
- std::is_same<
typename Tag::qualifier
, boost::parameter::in_reference
@@ -529,8 +544,8 @@ class="docutils literal">true_
, boost::mpl::if_<
- std::is_same<
typename Tag::qualifier
, boost::parameter::forward_reference
@@ -560,8 +575,8 @@ class="docutils literal">eval_if<
typename boost::mpl::eval_if<
- std::is_same<
typename Tag::qualifier
, boost::parameter::out_reference
@@ -572,8 +587,8 @@ class="docutils literal">true_
, boost::mpl::if_<
- std::is_same<
typename Tag::qualifier
, boost::parameter::forward_reference
@@ -589,8 +604,8 @@ class="docutils literal">false_
, boost::mpl::if_<
- std::is_const<T>
, boost::mpl::enable_if<
typename boost::mpl::eval_if<
- std::is_scalar<T>
, boost::mpl::false_
, boost::mpl::eval_if<
- std::is_same<
typename Tag::qualifier
, boost::parameter::in_reference
@@ -637,8 +652,8 @@ class="docutils literal">true_
, boost::mpl::if_<
- std::is_same<
typename Tag::qualifier
, boost::parameter::forward_reference
@@ -665,8 +680,8 @@ class="docutils literal">enable_if<
typename boost::mpl::eval_if<
- std::is_scalar<T>
, boost::mpl::false_
, boost::mpl::eval_if<
- std::is_same<
typename Tag::qualifier
, boost::parameter::consume_reference
@@ -686,8 +701,8 @@ class="docutils literal">true_
, boost::mpl::if_<
- std::is_same<
typename Tag::qualifier
, boost::parameter::forward_reference
@@ -714,8 +729,8 @@ class="docutils literal">enable_if<
typename boost::mpl::eval_if<
- std::is_scalar<T>
, boost::mpl::true_
, boost::mpl::eval_if<
- std::is_same<
typename Tag::qualifier
, boost::parameter::in_reference
@@ -735,8 +750,8 @@ class="docutils literal">true_
, boost::mpl::if_<
- std::is_same<
typename Tag::qualifier
, boost::parameter::forward_reference
@@ -765,8 +780,8 @@ class="docutils literal">eval_if<
typename boost::mpl::eval_if<
- std::is_same<
typename Tag::qualifier
, boost::parameter::out_reference
@@ -777,8 +792,8 @@ class="docutils literal">true_
, boost::mpl::if_<
- std::is_same<
typename Tag::qualifier
, boost::parameter::forward_reference
@@ -794,8 +809,8 @@ class="docutils literal">false_
, boost::mpl::if_<
- std::is_const<T>
, boost::mpl::enable_if<
typename boost::mpl::eval_if<
- std::is_scalar<T>
, boost::mpl::false_
, boost::mpl::eval_if<
- std::is_same<
typename Tag::qualifier
, boost::parameter::in_reference
@@ -841,8 +856,8 @@ class="docutils literal">true_
, boost::mpl::if_<
- std::is_same<
typename Tag::qualifier
, boost::parameter::forward_reference
@@ -868,8 +883,8 @@ class="docutils literal">enable_if<
typename boost::mpl::eval_if<
- std::is_scalar<T>
, boost::mpl::false_
, boost::mpl::eval_if<
- std::is_same<
typename Tag::qualifier
, boost::parameter::consume_reference
@@ -889,8 +904,8 @@ class="docutils literal">true_
, boost::mpl::if_<
- std::is_same<
typename Tag::qualifier
, boost::parameter::forward_reference
@@ -924,6 +939,244 @@ href="#instance">instance;
href="#get">get();
};
+If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is not +#defined, then:
+
+template <typename Tag>
+struct keyword
+{
+ template <typename T>
+ typename boost::enable_if<
+ typename boost::mpl::eval_if<
+ boost::is_scalar<T>
+ , boost::mpl::true_
+ , boost::mpl::eval_if<
+ boost::is_same<
+ typename Tag::qualifier
+ , boost::parameter::in_reference
+ >
+ , boost::mpl::true_
+ , boost::mpl::if_<
+ boost::is_same<
+ typename Tag::qualifier
+ , boost::parameter::forward_reference
+ >
+ , boost::mpl::true_
+ , boost::mpl::false_
+ >
+ >
+ >::type
+ , ArgumentPack
+ >::type constexpr
+ operator=(T const& value) const;
+
+ template <typename T>
+ typename boost::enable_if<
+ typename boost::mpl::eval_if<
+ typename boost::mpl::eval_if<
+ boost::is_same<
+ typename Tag::qualifier
+ , boost::parameter::out_reference
+ >
+ , boost::mpl::true_
+ , boost::mpl::if_<
+ boost::is_same<
+ typename Tag::qualifier
+ , boost::parameter::forward_reference
+ >
+ , boost::mpl::true_
+ , boost::mpl::false_
+ >
+ >
+ , boost::mpl::if_<
+ boost::is_const<T>
+ , boost::mpl::false_
+ , boost::mpl::true_
+ >
+ , boost::mpl::false_
+ >::type
+ , ArgumentPack
+ >::type constexpr
+ operator=(T& value) const;
+
+ template <typename T>
+ typename boost::enable_if<
+ typename boost::mpl::eval_if<
+ boost::is_scalar<T>
+ , boost::mpl::true_
+ , boost::mpl::eval_if<
+ boost::is_same<
+ typename Tag::qualifier
+ , boost::parameter::in_reference
+ >
+ , boost::mpl::true_
+ , boost::mpl::if_<
+ boost::is_same<
+ typename Tag::qualifier
+ , boost::parameter::forward_reference
+ >
+ , boost::mpl::true_
+ , boost::mpl::false_
+ >
+ >
+ >::type
+ , tagged default
+ >::type constexpr
+ operator|(T const& x) const;
+
+ template <typename T>
+ typename boost::enable_if<
+ typename boost::mpl::eval_if<
+ typename boost::mpl::eval_if<
+ boost::is_same<
+ typename Tag::qualifier
+ , boost::parameter::out_reference
+ >
+ , boost::mpl::true_
+ , boost::mpl::if_<
+ boost::is_same<
+ typename Tag::qualifier
+ , boost::parameter::forward_reference
+ >
+ , boost::mpl::true_
+ , boost::mpl::false_
+ >
+ >
+ , boost::mpl::if_<
+ boost::is_const<T>
+ , boost::mpl::false_
+ , boost::mpl::true_
+ >
+ , boost::mpl::false_
+ >::type
+ , tagged default
+ >::type constexpr
+ operator|(T& x) const;
+
+ template <typename F>
+ tagged lazy default operator||(F const&) const;
+
+ template <typename F>
+ tagged lazy default operator||(F&) const;
+
+ static keyword<Tag> const& instance;
+
+ static keyword<Tag>& get();
+};
+
If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is +#defined, then:
+
template <typename T> ArgumentPack operator=(T const&& value) const;
@@ -998,6 +1257,12 @@ template <typename T> tagged default operator|(T const& x) const;
template <typename T> tagged default operator|(T& x) const;
+
+If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is +#defined, then:
+template <typename T> tagged default operator|(T const&& x) const; template <typename T> static keyword<Tag>& get();++Deprecated
+This macro has been deprecated in favor of +instance.
++
@@ -1155,6 +1425,10 @@ href="../../../../boost/parameter/parameters.hpp" If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is +#defined, then:
template <typename ...PSpec> struct parameters @@ -1239,6 +1513,119 @@ href="#keyword-tag-type">keyword tag type. +If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is not +#defined, then:
++template < + typename P0 = unspecified + , typename P1 = unspecified + , … + , typename P ## β = unspecified +> +struct parameters +{ + template < + typename A0 + , typename A1 = unspecified + , … + , typename A ## β = unspecified + > + struct match + { + typedef … type; + }; + + template <typename A0> + ArgumentPack operator()(A0& a0) const; + + template <typename A0, typename A1> + ArgumentPack operator()(A0& a0, A1& a1) const; + + ⋮ + + template <typename A0, typename A1, …, typename A ## β> + ArgumentPack + operator()(A0& a0, A1& a1, …, A ## β & a ## β) const; +}; +++
++ + + + + +Requires: +P0, +P1, …, P +## β are models of ParameterSpec. ++Note
+In this section, R ## i and +K ## i are defined as follows: for +any argument type A ## i:
+++++let D0 the set [d0, …, d +## j] of all deduced parameter specs in +[P0, …, P +## β]+R ## i is the +intended argument +type of A ## i++if A ## i is a +result type of keyword<T>::operator=+then+++K ## i is +T+else+++if some A ## j +where j ≤ i is a result type of keyword<T>::operator=+or some P ## +j in j ≤ i is deduced+then+++if some parameter spec dj in D ## i matches +Ai+then+++K ## i is d ## j's keyword tag type.+Di+1 is +D ## i - +[d ## j]+else+++K ## i is P ## i's keyword tag type.+
- match
- @@ -1247,6 +1634,10 @@ href="../../../mpl/doc/refmanual/metafunction.html">Metafunction used to remove a forwarding function from overload resolution. +
If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is +#defined, then:
@@ -1296,16 +1687,87 @@ default + If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is not +#defined, then:
++
++ + + + + +Returns: +if P0, P1, …, Pβ are +satisfied (see below), then parameters<P0,P1,…,Pβ>. Otherwise, +match<A0,A1,…,Aβ>::type is not defined. +P0, P1, +…, Pβ are satisfied if, for +every j in 0…β, either:
++
- P ## j is the +unspecified default
+- or, P ## j is +a keyword tag type
+- or, P ## j is +optional<X,F> and either +
++
+- X is not K ## i for any i,
+- or X is some +K ## i and +mpl::apply<F,R +## i>::type::value is true
+- or, P ## j is +required<X,F>, and +
++
+- X is some K ## i, and
+- mpl::apply<F,R ## i>::type::value is +true
+
- operator()
- +
If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is +#defined, then:
template <typename ...Args> ArgumentPack operator()(Args&&... args) const;+Else:
++template <typename A0> ArgumentPack operator()(A0 const& a0) const; + +⋮ + +template <typename A0, …, typename A ## β> ArgumentPack operator()(A0 const& a0, …, A ## β const& a ## β) const; ++
@@ -1732,6 +2194,10 @@ determined from arguments. - m denotes the maximum arity, as determined from arguments.
+If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is +#defined, then:
template <typename T> struct boost_param_result_ ## __LINE__ ## name @@ -1774,8 +2240,8 @@ class="docutils literal">forward<A0>(a0) , … , std::forward<A ## n>(a ## n) +class="docutils literal">forward<A ## n>(a ## n) ) ); } @@ -1802,8 +2268,8 @@ class="docutils literal">forward<A0>(a0) , … , std::forward<A ## m>(a ## m) +class="docutils literal">forward<A ## m>(a ## m) ) ); } @@ -1905,15 +2371,15 @@ ResultType ) , std::forward< argument name ## 0 ## _type>( +class="docutils literal">forward< argument name ## 0 ## _type>( argument name ## 0 ) , … , std::forward< argument name ## n ## _type>( +class="docutils literal">forward< argument name ## n ## _type>( argument name ## n ) , std::argument name ## m )+If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is not +#defined, then:
++template <typename T> +struct boost_param_result_ ## __LINE__ ## name +{ + typedef result type; +}; + +struct boost_param_params_ ## __LINE__ ## name + : boost::parameter::parameters< + list of parameter specifications, based on arguments + > +{ +}; + +typedef boost_param_params_ ## __LINE__ ## name + boost_param_parameters_ ## __LINE__ ## name; + +template <typename Args> +typename boost_param_result_ ## __LINE__ ## name<Args>::type + boost_param_impl ## name(Args const&); + +template <typename A0, …, typename A ## n> +result type + name( + A0 const& a0, …, A ## n const& a ## n + , typename boost_param_parameters_ ## __LINE__ ## name::match< + A0 const, …, A ## n const + >::type = boost_param_parameters_ ## __LINE__ ## name() + ) +{ + return boost_param_impl ## name( + boost_param_parameters_ ## __LINE__ ## name()( + a0, …, a ## n + ) + ); +} + +… exponential number of overloads … +⋮ + +template <typename A0, …, typename A ## n> +result type + name( + A0& a0, …, A ## n & a ## n + , typename boost_param_parameters_ ## __LINE__ ## name::match< + A0, …, A ## n + >::type = boost_param_parameters_ ## __LINE__ ## name() + ) +{ + return boost_param_impl ## name( + boost_param_parameters_ ## __LINE__ ## name()( + a0, …, a ## n + ) + ); +} + +⋮ + +template <typename A0, …, typename A ## m> +result type + name( + A0 const& a0, …, A ## m const& ## ; am + , typename boost_param_parameters_ ## __LINE__ ## name::match< + A0 const, …, A ## m const + >::type = boost_param_parameters_ ## __LINE__ ## name() + ) +{ + return boost_param_impl ## name( + boost_param_parameters_ ## __LINE__ ## name()( + a0, …, a ## m + ) + ); +} + +… exponential number of overloads … +⋮ + +template <typename A0, …, typename A ## m> +result type + name( + A0& a0, …, A ## m & ## ; am + , typename boost_param_parameters_ ## __LINE__ ## name::match< + A0, …, A ## m + >::type = boost_param_parameters_ ## __LINE__ ## name() + ) +{ + return boost_param_impl ## name( + boost_param_parameters_ ## __LINE__ ## name()( + a0, …, a ## m + ) + ); +} + +template < + typename ResultType + , typename Args + , typename argument name ## 0 ## _type + , … + , typename argument name ## n ## _type +> +ResultType + boost_param_dispatch_0boost_ ## __LINE__ ## name( + (ResultType(*)()) + , Args const& args + , argument name ## 0 ## _type& argument name ## 0 + , … + , argument name ## n ## _type& argument name ## n + ); + +⋮ + +template < + typename ResultType + , typename Args + , typename argument name ## 0 ## _type + , … + , typename argument name ## m ## _type +> +ResultType + boost_param_dispatch_0boost_ ## __LINE__ ## name( + (ResultType(*)()) + , Args const& args + , argument name ## 0 ## _type& argument name ## 0 + , … + , argument name ## m ## _type& argument name ## m + ); + +template <typename Args> +typename boost_param_result_ ## __LINE__ ## name<Args>::type + boost_param_impl ## name(Args const& args) +{ + return boost_param_dispatch_0boost_ ## __LINE__ ## name( + static_cast<ResultType(*)()>(std::nullptr) + , args + , args[ keyword object of required parameter ## 0] + , … + , args[ keyword object of required parameter ## n] + ); +} + +template < + typename ResultType + , typename Args + , typename argument name ## 0 ## _type + , … + , typename argument name ## n ## _type +> +ResultType + boost_param_dispatch_0boost_ ## __LINE__ ## name( + (ResultType(*)()) + , Args const& args + , argument name ## 0 ## _type& argument name ## 0 + , … + , argument name ## n ## _type& argument name ## n + ) +{ + return boost_param_dispatch_0boost_ ## __LINE__ ## name( + static_cast<ResultType(*)()>(std::nullptr) + , (args, keyword object of optional parameter ## n + 1 = + default value of optional parameter ## n + 1 + ) + , argument name ## 0 + , … + , argument name ## n + , default value of optional parameter ## n + 1 + ); +} + +⋮ + +template < + typename ResultType + , typename Args + , typename argument name ## 0 ## _type + , … + , typename argument name ## m ## _type +> +ResultType + boost_param_dispatch_0boost_ ## __LINE__ ## name( + (ResultType(*)()) + , Args const& args + , argument name ## 0 ## _type& argument name ## 0 + , … + , argument name ## m ## _type& argument name ## m + ) +The arguments.
- m denotes the maximum arity, as determined from arguments.
+If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is +#defined, then:
struct boost_param_params_ ## __LINE__ ## ctor : boost::parameter::parameters< @@ -2188,8 +2873,8 @@ class="docutils literal">forward<A0>(a0) , … , std::forward<A ## n>(a ## n) +class="docutils literal">forward<A ## n>(a ## n) ) ) { @@ -2208,13 +2893,68 @@ class="docutils literal">forward<A0>(a0) , … , std::forward<A ## m>(a ## m) +class="docutils literal">forward<A ## m>(a ## m) ) ) { } +If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is not +#defined, then:
++struct boost_param_params_ ## __LINE__ ## ctor + : boost::parameter::parameters< + list of parameter specifications, based on arguments + > +{ +}; + +typedef boost_param_params_ ## __LINE__ ## name + constructor_parameters ## __LINE__; + +template <typename A0, …, typename A ## n> +cls(A0 const& a0, …, A ## n const& a ## n) + : impl(constructor_parameters ## __LINE__(a0, …, a ## n)) +{ +} + +… exponential number of overloads … +⋮ + +template <typename A0, …, typename A ## n> +cls(A0& a0, …, A ## n & a ## n) + : impl(constructor_parameters ## __LINE__(a0, …, a ## n)) +{ +} + +⋮ + +template <typename A0, …, typename A ## m> +cls(A0 const& a0, …, A ## m const& a ## m) + : impl(constructor_parameters ## __LINE__(a0, …, a ## m)) +{ +} + +… exponential number of overloads … +⋮ + +template <typename A0, …, typename A ## m> +cls(A0& a0, …, A ## m & a ## m) + : impl(constructor_parameters ## __LINE__(a0, …, a ## m)) +{ +} +The l < h
If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is +#defined, then:
+
- Expands to:
- @@ -2540,8 +3284,8 @@ class="docutils literal">forward<A2>(a2) , … , std::forward<A ## l>(a ## l) +class="docutils literal">forward<A ## l>(a ## l) ) ); } @@ -2580,8 +3324,8 @@ class="docutils literal">forward<A2>(a2) , … , std::forward<A ## l>(a ## l) +class="docutils literal">forward<A ## l>(a ## l) , std::forward<A ## forward<A2>(a2) , … , std::forward<A ## h>(a ## h) +class="docutils literal">forward<A ## h>(a ## h) ) ); }
If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is not +#defined, then:
++
- Expands to:
+- +
++template <typename A1, typename A2, …, typename A ## l> +r + name( + A1 const& a1, A2 const& a2, …, A ## l const& a ## l + , typename p::match<A1, A2, …, A ## l>::type pk = p() + ) +{ + return name_with_named_params(pk(a1, a2, …, a ## l)); +} + +… exponential number of overloads … +⋮ + +template <typename A1, typename A2, …, typename A ## l> +r + name( + A1& a1, A2& a2, …, A ## l & a ## l + , typename p::match<A1, A2, …, A ## l>::type pk = p() + ) +{ + return name_with_named_params(pk(a1, a2, …, a ## l)); +} + +template < + typename A1 + , typename A2 + , … + , typename A ## l + , typename A ## BOOST_PP_INC(l) +> +r + name( + A1 const& a1, A2 const& a2, …, A ## l const& a ## l + , A ## BOOST_PP_INC(l) const& a ## BOOST_PP_INC(l) + , typename p::match<A1, A2, …, Al, A ## BOOST_PP_INC(l)>::type pk = p() + ) +{ + return name_with_named_params( + pk(a1, a2, …, a ## l, a ## BOOST_PP_INC(l)) + ); +} + +… exponential number of overloads … +⋮ + +template < + typename A1 + , typename A2 + , … + , typename A ## l + , typename A ## BOOST_PP_INC(l) +> +r + name( + A1& a1, A2& a2, …, A ## l & a ## l + , A ## BOOST_PP_INC(l) & a ## BOOST_PP_INC(l) + , typename p::match<A1, A2, …, Al, A ## BOOST_PP_INC(l)>::type pk = p() + ) +{ + return name_with_named_params( + pk(a1, a2, …, a ## l, a ## BOOST_PP_INC(l)) + ); +} + +⋮ + +template <typename A1, typename A2, …, typename A ## h> +r + name( + A1 const& a1, A2 const& a2, …, A ## h const& a ## h + , typename p::match<A1, A2, …, A ## h>::type pk = p() + ) +{ + return name_with_named_params(pk(a1, a2, …, a ## h)); +} + +… exponential number of overloads … +⋮ + +template <typename A1, typename A2, …, typename A ## h> +r + name( + A1& a1, A2& a2, …, A ## h& a ## h + , typename p::match<A1, A2, …, A ## h>::type pk = p() + ) +{ + return name_with_named_params(pk(a1, a2, …, a ## h)); +} ++The test/macros.cpp and test/macros_eval_category.cpp @@ -2727,10 +3606,49 @@ href="../../../../boost/parameter/match.hpp"
7 Configuration Macros
-++7.1 BOOST_PARAMETER_HAS_PERFECT_FORWARDING
+Determines whether or not the library supports perfect forwarding, or the +preservation of parameter value categories. Users can manually disable this +macro by #defining the +BOOST_PARAMETER_DISABLE_PERFECT_FORWARDING +macro. Otherwise, the library will +#define this macro if and only if it and +the configuration macros BOOST_NO_FUNCTION_TEMPLATE_ORDERING +and BOOST_NO_SFINAE are not already +#defined but the configuration macros +BOOST_MOVE_PERFECT_FORWARDING and +BOOST_FUSION_VARIADIC_MPL_SEQUENCE are +already #defined.
++
++ + + + + +Defined in: +boost/parameter/config.hpp ++7.2 BOOST_PARAMETER_VARIADIC_MPL_SEQUENCE
-Determines the If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is +#defined, then determines the +MPL Variadic Sequence underlying the nested parameter_spec type of ::boost::fusion::list if BOOST_FUSION_HAS_VARIADIC_LIST is defined, -BOOST_FUSION_HAS_VARIADIC_LIST is +defined, ::boost::fusion::deque if BOOST_FUSION_HAS_VARIADIC_DEQUE is defined, or -BOOST_FUSION_HAS_VARIADIC_DEQUE is +defined, or ::boost::mpl::vector otherwise.
@@ -2776,10 +3694,15 @@ href="../../../../boost/parameter/parameters.hpp"
-+7.2 7.3 BOOST_PARAMETER_MAX_ARITY
-Determines the maximum number of arguments supported by the library. If -the Determines the maximum number of arguments supported by the library.
+If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is +#defined, then:
++
+- If the MPL Variadic Sequence underlying the nested parameter_spec type of ::boost::fusion::deque but not ::boost::mpl::vector-then this macro +>::boost::mpl::vector--then this macro can be safely ignored. User code that manually defines BOOST_PARAMETER_VARIADIC_MPL_SEQUENCE should also manually define this macro to the size limit of the sequence if it -has one. +has one.
+If BOOST_PARAMETER_HAS_PERFECT_FORWARDING is not +#defined, then:
++
- Mutable references must be wrapped by +boost::ref or +std::ref if passed by position to +Boost.Parameter-enabled functions with arity greater than or equal to +BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY.
++
@@ -2818,14 +3759,61 @@ href="../../../../boost/parameter/config.hpp" Default Value: BOOST_MPL_LIMIT_VECTOR_SIZE +>BOOST_MPL_LIMIT_VECTOR_SIZE if perfect +forwarding is supported, 8 otherwise. + ++ + +Minimum Value: +2 +7.4 BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY
+If this library does not support perfect forwarding, +determines the number of arguments less than which +parameters generates an exponential number of function call operator +overloads, and greater than or equal to which parameters does +not. Will only be #defined by the library +if it is not already #defined and +BOOST_PARAMETER_HAS_PERFECT_FORWARDING +is not #defined.
++
++ + + + + +Defined in: +boost/parameter/config.hpp ++
+ + + + +Default Value: +11 ++ Minimum Value: +1 -8 Tutorial
+8 Tutorial
Follow this link to the Boost.Parameter tutorial documentation.
diff --git a/doc/index.rst b/doc/index.rst index 249692b..00b5d6f 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -674,10 +674,11 @@ names in ``consume(…)`` or ``move_from(…)``. In order to see what happens when parameters are bound to arguments that violate their category constraints, attempt to compile the |compose_cpp|_ test -program with the ``LIBS_PARAMETER_TEST_COMPILE_FAILURE_0`` macro or the -``LIBS_PARAMETER_TEST_COMPILE_FAILURE_1`` macro ``#defined``. You should -encounter at least four compiler errors, each corresponding to a specific -constraint violation. +program with either the ``LIBS_PARAMETER_TEST_COMPILE_FAILURE_0`` macro, the +``LIBS_PARAMETER_TEST_COMPILE_FAILURE_1`` macro, the +``LIBS_PARAMETER_TEST_COMPILE_FAILURE_2`` macro, or the +``LIBS_PARAMETER_TEST_COMPILE_FAILURE_3`` macro ``#defined``. You should +encounter a compiler error caused by a specific constraint violation. .. @example.prepend(''' #include@@ -2504,6 +2505,45 @@ issues and workarounds for particular compilers. .. _`regression test results`: http://www.boost.org/regression/release/user/parameter.html +-------------------------- +Perfect Forwarding Support +-------------------------- + +If your compiler supports `perfect forwarding`_, then the Parameter library +will ``#define`` the macro ``BOOST_PARAMETER_HAS_PERFECT_FORWARDING`` unless +you disable it manually. If your compiler does not provide this support, then +``parameter::parameters::operator()`` will treat rvalue references as lvalue +const references to work around the `forwarding problem`_, so in certain cases +you must wrap |boost_ref|_ or |std_ref|_ around any arguments that will be +bound to out parameters. The |evaluate_category|_ and +|preprocessor_eval_category|_ test programs demonstrate this support. + +.. _`perfect forwarding`: http://www.justsoftwaresolutions.co.uk/cplusplus/rvalue_references_and_perfect_forwarding.html +.. _`forwarding problem`: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm +.. |boost_ref| replace:: ``boost\:\:ref`` +.. _boost_ref: ../../../core/doc/html/core/ref.html +.. |std_ref| replace:: ``std\:\:ref`` +.. _std_ref: http://en.cppreference.com/w/cpp/utility/functional/ref +.. |evaluate_category| replace:: evaluate_category.cpp +.. _evaluate_category: ../../test/evaluate_category.cpp +.. |preprocessor_eval_category| replace:: preprocessor_eval_category.cpp +.. _preprocessor_eval_category: ../../test/preprocessor_eval_category.cpp + +----------------- +No SFINAE Support +----------------- + +Some older compilers don't support SFINAE. If your compiler meets that +criterion, then Boost headers will ``#define`` the preprocessor symbol +``BOOST_NO_SFINAE``, and parameter-enabled functions won't be removed +from the overload set based on their signatures. The |sfinae_cpp|_ and +|optional_deduced_sfinae|_ test programs demonstrate SFINAE support. + +.. |sfinae_cpp| replace:: sfinae.cpp +.. _sfinae_cpp: ../../test/sfinae.cpp +.. |optional_deduced_sfinae| replace:: optional_deduced_sfinae.cpp +.. _optional_deduced_sfinae: ../../test/optional_deduced_sfinae.cpp + --------------------------- No Support for |result_of|_ --------------------------- @@ -2522,6 +2562,58 @@ function as a default generator on those compilers, you'll need to wrap it in a class that provides ``result_type`` as a ``typedef`` and invokes the function via its ``operator()``. +--------------------------------------------- +Can't Declare |ParameterSpec| via ``typedef`` +--------------------------------------------- + +In principle you can declare a |ParameterSpec| as a ``typedef`` for a +specialization of ``parameters<…>``, but Microsoft Visual C++ 6.x has been +seen to choke on that usage. The workaround is to use inheritance and declare +your |ParameterSpec| as a class: + +.. parsed-literal:: + + **struct dfs_parameters + :** parameter::parameters< + tag::graph, tag::visitor, tag::root_vertex + , tag::index_map, tag::color_map + > + **{ + };** + +------------------------------------------------- +Default Arguments Unsupported on Nested Templates +------------------------------------------------- + +As of this writing, Borland compilers don't support the use of default +template arguments on member class templates. As a result, you have to supply +``BOOST_PARAMETER_MAX_ARITY`` arguments to every use of +``parameters<…>::match``. Since the actual defaults used are unspecified, the +workaround is to use |BOOST_PARAMETER_MATCH|_ to declare default arguments for +SFINAE. + +.. |BOOST_PARAMETER_MATCH| replace:: ``BOOST_PARAMETER_MATCH`` + +-------------------------------------------------- +Compiler Can't See References In Unnamed Namespace +-------------------------------------------------- + +If you use Microsoft Visual C++ 6.x, you may find that the compiler has +trouble finding your keyword objects. This problem has been observed, but +only on this one compiler, and it disappeared as the test code evolved, so +we suggest you use it only as a last resort rather than as a preventative +measure. The solution is to add *using-declarations* to force the names +to be available in the enclosing namespace without qualification:: + + namespace graphs { + + using graphs::graph; + using graphs::visitor; + using graphs::root_vertex; + using graphs::index_map; + using graphs::color_map; + } + ============== Python Binding ============== @@ -2620,4 +2712,21 @@ lives in an outer namespace by applying a *using-declaration*:: This technique for avoiding unintentional argument-dependent lookup is due to Herb Sutter. +.. [#sfinae] This capability depends on your compiler's support for +SFINAE. **SFINAE**: **S**\ ubstitution **F**\ ailure **I**\ s **N**\ ot +**A**\ n **E**\ rror. If type substitution during the instantiation of a +function template results in an invalid type, no compilation error is emitted; +instead the overload is removed from the overload set. By producing an +invalid type in the function signature depending on the result of some +condition, we can decide whether or not an overload is considered during +overload resolution. The technique is formalized in the |enable_if|_ +utility. Most recent compilers support SFINAE; on compilers that don't +support it, the Boost config library will ``#define`` the symbol +``BOOST_NO_SFINAE``. See +http://www.semantics.org/once_weakly/w02_SFINAE.pdf for more information on +SFINAE. + +.. |enable_if| replace:: ``enable_if`` +.. _enable_if: ../../../core/doc/html/core/enable_if.html + diff --git a/doc/reference.rst b/doc/reference.rst index 769733f..1b06f9b 100644 --- a/doc/reference.rst +++ b/doc/reference.rst @@ -83,6 +83,8 @@ requirements given in the detailed description that follows the code block. In a specification of the tokens generated by a macro, **bold type** is used to highlight the position of the expanded macro argument in the result. +The special character β represents the value of |BOOST_PARAMETER_MAX_ARITY|_. + ////////////////////////////////////////////////////////////////////////////// Terminology @@ -290,6 +292,8 @@ The type of every |keyword object| is a specialization of |keyword|. __ ../../../../boost/parameter/keyword.hpp +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is ``#defined``, **then** + .. parsed-literal:: template @@ -298,16 +302,16 @@ __ ../../../../boost/parameter/keyword.hpp template typename boost::`enable_if`_< typename boost::mpl::`eval_if_`_< - std::`is_scalar`_ + boost::`is_scalar`_ , boost::mpl::`true_`_ , boost::mpl::`eval_if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::in_reference > , boost::mpl::`true_`_ , boost::mpl::`if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::forward_reference > @@ -324,13 +328,13 @@ __ ../../../../boost/parameter/keyword.hpp typename boost::`enable_if`_< typename boost::mpl::`eval_if_`_< typename boost::mpl::`eval_if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::out_reference > , boost::mpl::`true_`_ , boost::mpl::`if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::forward_reference > @@ -339,7 +343,7 @@ __ ../../../../boost/parameter/keyword.hpp > >::type , boost::mpl::`if_`_< - std::`is_const`_ + boost::`is_const`_ , boost::mpl::`false_`_ , boost::mpl::`true_`_ > @@ -352,16 +356,16 @@ __ ../../../../boost/parameter/keyword.hpp template typename boost::`enable_if`_< typename boost::mpl::`eval_if_`_< - std::`is_scalar`_ + boost::`is_scalar`_ , boost::mpl::`false_`_ , boost::mpl::`eval_if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::in_reference > , boost::mpl::`true_`_ , boost::mpl::`if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::forward_reference > @@ -377,16 +381,16 @@ __ ../../../../boost/parameter/keyword.hpp template typename boost::`enable_if`_< typename boost::mpl::`eval_if_`_< - std::`is_scalar`_ + boost::`is_scalar`_ , boost::mpl::`false_`_ , boost::mpl::`eval_if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::consume_reference > , boost::mpl::`true_`_ , boost::mpl::`if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::forward_reference > @@ -402,16 +406,16 @@ __ ../../../../boost/parameter/keyword.hpp template typename boost::`enable_if`_< typename boost::mpl::`eval_if_`_< - std::`is_scalar`_ + boost::`is_scalar`_ , boost::mpl::`true_`_ , boost::mpl::`eval_if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::in_reference > , boost::mpl::`true_`_ , boost::mpl::`if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::forward_reference > @@ -428,13 +432,13 @@ __ ../../../../boost/parameter/keyword.hpp typename boost::`enable_if`_< typename boost::mpl::`eval_if_`_< typename boost::mpl::`eval_if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::out_reference > , boost::mpl::`true_`_ , boost::mpl::`if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::forward_reference > @@ -443,7 +447,7 @@ __ ../../../../boost/parameter/keyword.hpp > >::type , boost::mpl::`if_`_< - std::`is_const`_ + boost::`is_const`_ , boost::mpl::`false_`_ , boost::mpl::`true_`_ > @@ -456,16 +460,16 @@ __ ../../../../boost/parameter/keyword.hpp template typename boost::`enable_if`_< typename boost::mpl::`eval_if_`_< - std::`is_scalar`_ + boost::`is_scalar`_ , boost::mpl::`true_`_ , boost::mpl::`eval_if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::in_reference > , boost::mpl::`true_`_ , boost::mpl::`if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::forward_reference > @@ -481,16 +485,16 @@ __ ../../../../boost/parameter/keyword.hpp template typename boost::`enable_if`_< typename boost::mpl::`eval_if_`_< - std::`is_scalar`_ + boost::`is_scalar`_ , boost::mpl::`false_`_ , boost::mpl::`eval_if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::consume_reference > , boost::mpl::`true_`_ , boost::mpl::`if_`_< - std::`is_same`_< + boost::`is_same`_< typename Tag::qualifier , boost::parameter::forward_reference > @@ -514,13 +518,140 @@ __ ../../../../boost/parameter/keyword.hpp static keyword & get_\(); }; +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is **not** ``#defined``, +**then** + +.. parsed-literal:: + + template + struct keyword + { + template + typename boost::`enable_if`_< + typename boost::mpl::`eval_if_`_< + boost::`is_scalar`_ + , boost::mpl::`true_`_ + , boost::mpl::`eval_if_`_< + boost::`is_same`_< + typename Tag::qualifier + , boost::parameter::in_reference + > + , boost::mpl::`true_`_ + , boost::mpl::`if_`_< + boost::`is_same`_< + typename Tag::qualifier + , boost::parameter::forward_reference + > + , boost::mpl::`true_`_ + , boost::mpl::`false_`_ + > + > + >::type + , |ArgumentPack|_ + >::type constexpr + `operator=`_\(T const& value) const; + + template + typename boost::`enable_if`_< + typename boost::mpl::`eval_if_`_< + typename boost::mpl::`eval_if_`_< + boost::`is_same`_< + typename Tag::qualifier + , boost::parameter::out_reference + > + , boost::mpl::`true_`_ + , boost::mpl::`if_`_< + boost::`is_same`_< + typename Tag::qualifier + , boost::parameter::forward_reference + > + , boost::mpl::`true_`_ + , boost::mpl::`false_`_ + > + >::type + , boost::mpl::`if_`_< + boost::`is_const`_ + , boost::mpl::`false_`_ + , boost::mpl::`true_`_ + > + , boost::mpl::`false_`_ + >::type + , |ArgumentPack|_ + >::type constexpr + `operator=`_\(T& value) const; + + template + typename boost::`enable_if`_< + typename boost::mpl::`eval_if_`_< + boost::`is_scalar`_ + , boost::mpl::`true_`_ + , boost::mpl::`eval_if_`_< + boost::`is_same`_< + typename Tag::qualifier + , boost::parameter::in_reference + > + , boost::mpl::`true_`_ + , boost::mpl::`if_`_< + boost::`is_same`_< + typename Tag::qualifier + , boost::parameter::forward_reference + > + , boost::mpl::`true_`_ + , boost::mpl::`false_`_ + > + > + >::type + , *tagged default* + >::type + `operator|`_\(T const& x) const; + + template + typename boost::`enable_if`_< + typename boost::mpl::`eval_if_`_< + typename boost::mpl::`eval_if_`_< + boost::`is_same`_< + typename Tag::qualifier + , boost::parameter::out_reference + > + , boost::mpl::`true_`_ + , boost::mpl::`if_`_< + boost::`is_same`_< + typename Tag::qualifier + , boost::parameter::forward_reference + > + , boost::mpl::`true_`_ + , boost::mpl::`false_`_ + > + >::type + , boost::mpl::`if_`_< + boost::`is_const`_ + , boost::mpl::`false_`_ + , boost::mpl::`true_`_ + > + , boost::mpl::`false_`_ + >::type + , *tagged default* + >::type + `operator|`_\(T& x) const; + + template + *tagged lazy default* `operator||`_\(F const&) const; + + template + *tagged lazy default* `operator||`_\(F&) const; + + static keyword const& instance; + + static keyword & get_\(); + }; + .. _enable_if: ../../../core/doc/html/core/enable_if.html .. _eval_if_: ../../../mpl/doc/refmanual/eval-if.html .. _false_: ../../../mpl/doc/refmanual/bool.html .. _if_: ../../../mpl/doc/refmanual/if.html -.. _is_const: http://en.cppreference.com/w/cpp/types/is_const -.. _is_same: http://en.cppreference.com/w/cpp/types/is_same -.. _is_scalar: http://en.cppreference.com/w/cpp/types/is_scalar +.. _is_const: ../../../type_traits/doc/html/boost_typetraits/is_const.html +.. _is_same: ../../../type_traits/doc/html/boost_typetraits/is_same.html +.. _is_scalar: ../../../type_traits/doc/html/boost_typetraits/is_scalar.html .. _true_: ../../../mpl/doc/refmanual/bool.html .. |operator=| replace:: ``operator=`` @@ -531,6 +662,10 @@ __ ../../../../boost/parameter/keyword.hpp template |ArgumentPack|_ operator=(T const& value) const; template |ArgumentPack|_ operator=(T& value) const; + +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is ``#defined``, **then** +.. parsed-literal:: + template |ArgumentPack|_ operator=(T const&& value) const; template |ArgumentPack|_ operator=(T&& value) const; @@ -562,6 +697,10 @@ nested ``qualifier`` type of ``Tag`` must be ``consume_reference`` or template *tagged default* operator|(T const& x) const; template *tagged default* operator|(T& x) const; + +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is ``#defined``, **then** +.. parsed-literal:: + template *tagged default* operator|(T const&& x) const; template *tagged default* operator|(T&& x) const; @@ -641,7 +780,7 @@ corresponding template argument to ``parameters``. __ ../../../../boost/parameter/parameters.hpp -.. parsed-literal:: +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is ``#defined``, **then** template struct parameters @@ -684,12 +823,78 @@ __ ../../../../boost/parameter/parameters.hpp | else | ``K`` ## *i* is the |keyword tag type| of ``P`` ## *i*. +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is **not** ``#defined``, +**then** + +.. parsed-literal:: + + template < + typename P0 = *unspecified* + , typename P1 = *unspecified* + , … + , typename P ## β = *unspecified* + > + struct parameters + { + template < + typename A0 + , typename A1 = *unspecified* + , … + , typename A ## β = *unspecified* + > + struct `match`_ + { + typedef … type; + }; + + template + |ArgumentPack|_ `operator()`_\(A0& a0) const; + + template + |ArgumentPack|_ `operator()`_\(A0& a0, A1& a1) const; + + :vellipsis:`⋮` + + template + |ArgumentPack|_ + `operator()`_\(A0& a0, A1& a1, …, A ## β & a ## β) const; + }; + +:Requires: ``P0``, ``P1``, …, ``P`` ## β must be models of |ParameterSpec|_. + +.. Note:: + + In this section, ``R`` ## *i* and ``K`` ## *i* are defined as follows: for + any argument type ``A`` ## *i*: + + | let ``D0`` the set [ d0, …, d ## *j*] of all **deduced** + | *parameter specs* in [ ``P0``, …, ``P`` ## β] + | ``R`` ## *i* is the |intended argument type| of ``A`` ## *i* + | + | if ``A`` ## *i* is a result type of ``keyword ::`` |operator=|_ + | then + | ``K`` ## *i* is ``T`` + | else + | if some ``A`` ## *j* where *j* ≤ *i* is a result type of + | ``keyword ::`` |operator=|_ + | *or* some ``P`` ## *j* in *j* ≤ *i* is **deduced** + | then + | if some *parameter spec* ``d`` ## *j* in ``D`` ## *i* + | matches ``A`` ## *i* + | then + | ``K`` ## *i* is the |keyword tag type| of ``d`` ## *j*. + | ``D``:sub:`i+1` is ``D`` ## *i* - [ ``d`` ## *j*] + | else + | ``K`` ## *i* is the |keyword tag type| of ``P`` ## *i*. + .. _match: ``match`` A |Metafunction|_ used to remove a `forwarding function`_ from overload resolution. +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is ``#defined``, **then** + :Returns: if all elements in ``Params...`` are *satisfied* (see below), then ``parameters ``. Otherwise, ``match ::type`` is not defined. @@ -706,15 +911,49 @@ Each element ``P`` in ``Params...`` is **satisfied** if either: - ``X`` is some ``K`` ## *i*, **and** - ``mpl::apply ::type::value`` is ``true`` +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is **not** ``#defined``, +**then** + +:Returns: if ``P0``, ``P1``, …, ``Pβ`` are *satisfied* (see below), then +``parameters ``. Otherwise, ``match ::type`` is not +defined. + +``P0``, ``P1``, …, ``Pβ`` are **satisfied** if, for every *j* in 0…β, +either: + +* ``P`` ## *j* is the *unspecified* default +* **or**, ``P`` ## *j* is a *keyword tag type* +* **or**, ``P`` ## *j* is |optional|_ `` `` and either + - ``X`` is not ``K`` ## *i* for any *i*, + - **or** ``X`` is some ``K`` ## *i* and ``mpl::apply ::type::value`` is ``true`` +* **or**, ``P`` ## *j* is |required|_ `` ``, and + - ``X`` is some ``K`` ## *i*, **and** + - ``mpl::apply ::type::value`` is ``true`` + .. _operator(): ``operator()`` +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is ``#defined``, **then** + .. parsed-literal:: template |ArgumentPack|_ operator()(Args&&... args) const; +**Else** + +.. parsed-literal:: + + template |ArgumentPack|_ operator()(A0 const& a0) const; + + :vellipsis:`⋮` + + template + |ArgumentPack|_ + `operator()`_\(A0 const& a0, …, A ## β const& a ## β) const; + :Returns: An |ArgumentPack|_ containing, for each ``a`` ## *i*, - if ``a`` ## *i* is a single-element |ArgumentPack|, its element @@ -733,7 +972,9 @@ Each element ``P`` in ``Params...`` is **satisfied** if either: These templates describe the requirements on a function parameter. ``optional`` is defined in: |optional_header|_ + ``required`` is defined in: |required_header|_ + Both headers are included by: |preprocessor_header|_ .. |optional_header| replace:: boost/parameter/optional.hpp @@ -960,6 +1201,8 @@ Approximate expansion: * ``n`` denotes the *minimum* arity, as determined from ``arguments``. * ``m`` denotes the *maximum* arity, as determined from ``arguments``. +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is ``#defined``, **then** + .. parsed-literal:: template @@ -1130,10 +1373,200 @@ Approximate expansion: , *argument name* ## **m** ## _type&& *argument name* ## **m** ) +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is **not** ``#defined``, +**then** + +.. parsed-literal:: + + template + struct boost_param_result\_ ## __LINE__ ## **name** + { + typedef **result** type; + }; + + struct boost_param_params\_ ## __LINE__ ## **name** + : boost::parameter::parameters< + *list of parameter specifications, based on arguments* + > + { + }; + + typedef boost_param_params\_ ## __LINE__ ## **name** + boost_param_parameters\_ ## __LINE__ ## **name**; + + template + typename boost_param_result\_ ## __LINE__ ## **name**\ ::type + boost_param_impl ## **name**\ (Args const&); + + template + **result** + **name**\ ( + A0 const& a0, …, A ## **n** const& a ## **n** + , typename boost_param_parameters\_ ## __LINE__ ## **name**::match< + A0 const, …, A ## **n** const + >::type = boost_param_parameters\_ ## __LINE__ ## **name**\ () + ) + { + return boost_param_impl ## **name**\ ( + boost_param_parameters\_ ## __LINE__ ## **name**\ ()( + a0, …, a ## **n** + ) + ); + } + + *… exponential number of overloads …* + :vellipsis:`⋮` + + template + **result** + **name**\ ( + A0& a0, …, A ## **n** & a ## **n** + , typename boost_param_parameters\_ ## __LINE__ ## **name**::match< + A0, …, A ## **n** + >::type = boost_param_parameters\_ ## __LINE__ ## **name**\ () + ) + { + return boost_param_impl ## **name**\ ( + boost_param_parameters\_ ## __LINE__ ## **name**\ ()( + a0, …, a ## **n** + ) + ); + } + + :vellipsis:`⋮` + + template + **result** + **name**\ ( + A0 const& a0, …, A ## **m** const& a ## **m** + , typename boost_param_parameters\_ ## __LINE__ ## **name**::match< + A0 const, …, A ## **m** const + >::type = boost_param_parameters\_ ## __LINE__ ## **name**\ () + ) + { + return boost_param_impl ## **name**\ ( + boost_param_parameters\_ ## __LINE__ ## **name**\ ()( + a0, …, a ## **m** + ) + ); + } + + *… exponential number of overloads …* + :vellipsis:`⋮` + + template + **result** + **name**\ ( + A0& a0, …, A ## **m** & a ## **m** + , typename boost_param_parameters\_ ## __LINE__ ## **name**::match< + A0, …, A ## **m** + >::type = boost_param_parameters\_ ## __LINE__ ## **name**\ () + ) + { + return boost_param_impl ## **name**\ ( + boost_param_parameters\_ ## __LINE__ ## **name**\ ()( + a0, …, a ## **m** + ) + ); + } + + template < + typename ResultType + , typename Args + , typename *argument name* ## **0** ## _type + , … + , typename *argument name* ## **n** ## _type + > + ResultType + boost_param_dispatch_0boost\_ ## __LINE__ ## **name**\ ( + (ResultType(\ *)()) + , Args const& args + , *argument name* ## **0** ## _type& *argument name* ## **0** + , … + , *argument name* ## **n** ## _type& *argument name* ## **m** + ); + + :vellipsis:`⋮` + + template < + typename ResultType + , typename Args + , typename *argument name* ## **0** ## _type + , … + , typename *argument name* ## **m** ## _type + > + ResultType + boost_param_dispatch_0boost\_ ## __LINE__ ## **name**\ ( + (ResultType(\ *)()) + , Args const& args + , *argument name* ## **0** ## _type& *argument name* ## **0** + , … + , *argument name* ## **m** ## _type& *argument name* ## **m** + ); + + template + typename boost_param_result\_ ## __LINE__ ## **name**\ ::type + boost_param_impl ## **name**\ (Args const& args) + { + return boost_param_dispatch_0boost\_ ## __LINE__ ## **name**\ ( + static_cast (std::nullptr) + , args + , args[ *keyword object of required parameter* ## **0**] + , … + , args[ *keyword object of required parameter* ## **n**] + ); + } + + template < + typename ResultType + , typename Args + , typename *argument name* ## **0** ## _type + , … + , typename *argument name* ## **n** ## _type + > + ResultType + boost_param_dispatch_0boost\_ ## __LINE__ ## **name**\ ( + (ResultType(\ *)()) + , Args const& args + , *argument name* ## **0** ## _type& *argument name* ## **0** + , … + , *argument name* ## **n** ## _type& *argument name* ## **m** + ) + { + return boost_param_dispatch_0boost\_ ## __LINE__ ## **name**\ ( + static_cast (std::nullptr) + , (args, *keyword object of optional parameter* ## **n + 1** = + *default value of optional parameter* ## **n + 1** + ) + , *argument name* ## **0** + , … + , *argument name* ## **n** + , *default value of optional parameter* ## **n + 1** + ); + } + + :vellipsis:`⋮` + + template < + typename ResultType + , typename Args + , typename *argument name* ## **0** ## _type + , … + , typename *argument name* ## **m** ## _type + > + ResultType + boost_param_dispatch_0boost\_ ## __LINE__ ## **name**\ ( + (ResultType(\ *)()) + , Args const& args + , *argument name* ## **0** ## _type& *argument name* ## **0** + :vellipsis:`⋮` + , *argument name* ## **m** ## _type& *argument name* ## **m** + ) + The |preprocessor|_, |preprocessor_deduced|_, and |preprocessor_eval_cat|_ test programs demonstrate proper usage of this macro. -.. _`forward`: http://en.cppreference.com/w/cpp/utility/forward +.. _`forward`: http\://en.cppreference.com/w/cpp/utility/forward .. |preprocessor| replace:: preprocessor.cpp .. _preprocessor: ../../test/preprocessor.cpp .. |preprocessor_deduced| replace:: preprocessor_deduced.cpp @@ -1247,6 +1680,8 @@ Approximate expansion: * ``n`` denotes the *minimum* arity, as determined from ``arguments``. * ``m`` denotes the *maximum* arity, as determined from ``arguments``. +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is ``#defined``, **then** + .. parsed-literal:: struct boost_param_params\_ ## __LINE__ ## ctor @@ -1284,11 +1719,58 @@ Approximate expansion: ) { } -= + +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is **not** ``#defined``, +**then** + +.. parsed-literal:: + + struct boost_param_params\_ ## __LINE__ ## ctor + : boost::parameter::parameters< + *list of parameter specifications, based on arguments* + > + { + }; + + typedef boost_param_params\_ ## __LINE__ ## **name** + constructor_parameters ## __LINE__; + + template + *cls*\ (A0 const& a0, …, A ## **n** const& a ## **n**) + : *impl*\ (constructor_parameters ## __LINE__(a0, …, a ## **n**)) + { + } + + *… exponential number of overloads …* + :vellipsis:`⋮` + + template + *cls*\ (A0& a0, …, A ## **n** & a ## **n**) + : *impl*\ (constructor_parameters ## __LINE__(a0, …, a ## **n**)) + { + } + + :vellipsis:`⋮` + + template + *cls*\ (A0 const& a0, …, A ## **m** const& a ## **m**) + : *impl*\ (constructor_parameters ## __LINE__(a0, …, a ## **m**)) + { + } + + *… exponential number of overloads …* + :vellipsis:`⋮` + + template + *cls*\ (A0& a0, …, A ## **m** & a ## **m**) + : *impl*\ (constructor_parameters ## __LINE__(a0, …, a ## **m**)) + { + } + The |preprocessor|_ and |preprocessor_eval_cat|_ test programs demonstrate proper usage of this macro. -.. _`forward`: http://en.cppreference.com/w/cpp/utility/forward +.. _`forward`: http\://en.cppreference.com/w/cpp/utility/forward .. |preprocessor| replace:: preprocessor.cpp .. _preprocessor: ../../test/preprocessor.cpp .. |preprocessor_eval_cat| replace:: preprocessor_eval_category.cpp @@ -1507,6 +1989,8 @@ __ ../../../../boost/parameter/macros.hpp :Requires: ``l`` and ``h`` are nonnegative integer tokens such that ``l`` < ``h`` +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is ``#defined``, **then** + Expands to: .. parsed-literal:: @@ -1576,11 +2060,114 @@ Expands to: ); } +**If** |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is **not** ``#defined``, +**then** + +Expands to: + +.. parsed-literal:: + + template + r + name( + A1 const& a1, A2 const& a2, …, A ## **l** const& a ## **l** + , typename **p**::match ::type pk = **p**\ () + ) + { + return **name**\ _with_named_params(pk(a1, a2, …, a ## **l**)); + } + + *… exponential number of overloads …* + :vellipsis:`⋮` + + template + r + name( + A1& a1, A2& a2, …, A ## **l** & a ## **l** + , typename **p**::match ::type pk = **p**\ () + ) + { + return **name**\ _with_named_params(pk(a1, a2, …, a ## **l**)); + } + + template < + typename A1 + , typename A2 + , … + , typename A ## **l** + , typename A ## `BOOST_PP_INC`_\ (**l**) + > + r + name( + A1 const& a1, A2 const& a2, …, A ## **l** const& a ## **l** + , A ## `BOOST_PP_INC`_\ (**l**) const& a ## `BOOST_PP_INC`_\ (**l**) + , typename **p**::match< + A1 const, A2 const, …, A ## **l** const + , A ## `BOOST_PP_INC`_\ (**l**) const + >::type pk = **p**\ () + ) + { + return **name**\ _with_named_params( + pk(a1, a2, …, a ## **l**, a ## `BOOST_PP_INC`_\ (**l**)) + ); + } + + *… exponential number of overloads …* + :vellipsis:`⋮` + + template < + typename A1 + , typename A2 + , … + , typename A ## **l** + , typename A ## `BOOST_PP_INC`_\ (**l**) + > + r + name( + A1& a1, A2& a2, …, A ## **l** & a ## **l** + , A ## `BOOST_PP_INC`_\ (**l**) & a ## `BOOST_PP_INC`_\ (**l**) + , typename **p**::match< + A1, A2, …, A ## **l**, A ## `BOOST_PP_INC`_\ (**l**) + >::type pk = **p**\ () + ) + { + return **name**\ _with_named_params( + pk(a1, a2, …, a ## **l**, a ## `BOOST_PP_INC`_\ (**l**)) + ); + } + + :vellipsis:`⋮` + + template + r + name( + A1 const& a1, A2 const& a2, …, A ## **h** const& x ## **h** + , typename **p**::match< + A1 const, A2 const, …, A ## **h** const + >::type pk = **p**\ () + ) + { + return **name**\ _with_named_params(pk(a1, a2, …, a ## **h**)); + } + + *… exponential number of overloads …* + :vellipsis:`⋮` + + template + r + name( + A1& a1, A2& a2, …, A ## **h** & x ## **h** + , typename **p**::match ::type pk = **p**\ () + ) + { + return **name**\ _with_named_params(pk(a1, a2, …, a ## **h**)); + } + The |macros_cpp|_ and |macros_eval_cat_cpp|_ test programs demonstrate proper usage of this macro. .. _`BOOST_PP_INC`: ../../../preprocessor/doc/ref/inc.html -.. _`forward`: http://en.cppreference.com/w/cpp/utility/forward +.. _`forward`: http\://en.cppreference.com/w/cpp/utility/forward .. |macros_cpp| replace:: macros.cpp .. _macros_cpp: ../../test/macros.cpp .. |macros_eval_cat_cpp| replace:: macros_eval_category.cpp @@ -1647,15 +2234,39 @@ Expands to: Configuration Macros ==================== +``BOOST_PARAMETER_HAS_PERFECT_FORWARDING`` +------------------------------------------ + +Determines whether or not the library supports perfect forwarding, or the +preservation of parameter value categories. Users can manually disable this +macro by ``#defining`` the ``BOOST_PARAMETER_DISABLE_PERFECT_FORWARDING`` +macro. Otherwise, the library will ``#define`` this macro if and only if it +and the configuration macros |BOOST_NO_FUNCTION_TEMPLATE_ORDERING|_ and +|BOOST_NO_SFINAE|_ are not already ``#defined`` but the configuration macro +|BOOST_MOVE_PERFECT_FORWARDING|_ is already defined. + +.. |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| replace:: ``BOOST_PARAMETER_HAS_PERFECT_FORWARDING`` +.. |BOOST_NO_FUNCTION_TEMPLATE_ORDERING| replace:: ``BOOST_NO_FUNCTION_TEMPLATE_ORDERING`` +.. _BOOST_NO_FUNCTION_TEMPLATE_ORDERING: ../../../config/doc/html/boost_config/boost_macro_reference.html +.. |BOOST_NO_SFINAE| replace:: ``BOOST_NO_SFINAE`` +.. _BOOST_NO_SFINAE: ../../../config/doc/html/boost_config/boost_macro_reference.html +.. |BOOST_MOVE_PERFECT_FORWARDING| replace:: ``BOOST_MOVE_PERFECT_FORWARDING`` +.. _BOOST_MOVE_PERFECT_FORWARDING: ../../../../boost/move/detail/workaround.hpp + +:Defined in: `boost/parameter/config.hpp`__ + +__ ../../../../boost/parameter/config.hpp + ``BOOST_PARAMETER_VARIADIC_MPL_SEQUENCE`` ----------------------------------------- -Determines the `MPL Variadic Sequence`_ underlying the nested -``parameter_spec`` type of |parameters|. If the user does not manually -``#define`` this macro, then the library will ``#define`` it as -|boost_fusion_list|_ if |BOOST_FUSION_HAS_VARIADIC_LIST|_ is defined, -|boost_fusion_deque|_ if |BOOST_FUSION_HAS_VARIADIC_DEQUE|_ is defined, -or |boost_mpl_vector|_ otherwise. +If |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is ``#defined``, then determines +the `MPL Variadic Sequence`_ underlying the nested ``parameter_spec`` type of +|parameters|. If the user does not manually ``#define`` this macro, then the +library will ``#define`` it as |boost_fusion_list|_ if +|BOOST_FUSION_HAS_VARIADIC_LIST|_ is defined, |boost_fusion_deque|_ if +|BOOST_FUSION_HAS_VARIADIC_DEQUE|_ is defined, or |boost_mpl_vector|_ +otherwise. :Example: @@ -1663,19 +2274,20 @@ or |boost_mpl_vector|_ otherwise. #define BOOST_PARAMETER_VARIADIC_MPL_SEQUENCE |boost_fusion_vector|_ +.. |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| replace:: ``BOOST_PARAMETER_HAS_PERFECT_FORWARDING`` .. |BOOST_PARAMETER_VARIADIC_MPL_SEQUENCE| replace:: ``BOOST_PARAMETER_VARIADIC_MPL_SEQUENCE`` .. _`MPL Variadic Sequence`: ../../../mpl/doc/refmanual/variadic-sequence.html .. |BOOST_FUSION_HAS_VARIADIC_LIST| replace:: ``BOOST_FUSION_HAS_VARIADIC_LIST`` .. _BOOST_FUSION_HAS_VARIADIC_LIST: ../../../../boost/fusion/container/list/list_fwd.hpp -.. |boost_fusion_list| replace:: ``boost::fusion::list`` +.. |boost_fusion_list| replace:: ``boost\:\:fusion\:\:list`` .. _boost_fusion_list: ../../../fusion/doc/html/fusion/container/list.html .. |BOOST_FUSION_HAS_VARIADIC_DEQUE| replace:: ``BOOST_FUSION_HAS_VARIADIC_DEQUE`` .. _BOOST_FUSION_HAS_VARIADIC_DEQUE: ../../../../boost/fusion/container/deque/deque_fwd.hpp -.. |boost_fusion_deque| replace:: ``boost::fusion::deque`` +.. |boost_fusion_deque| replace:: ``boost\:\:fusion\:\:deque`` .. _boost_fusion_deque: ../../../fusion/doc/html/fusion/container/deque.html -.. |boost_fusion_vector| replace:: ``boost::fusion::vector`` +.. |boost_fusion_vector| replace:: ``boost\:\:fusion\:\:vector`` .. _boost_fusion_vector: ../../../fusion/doc/html/fusion/container/vector.html -.. |boost_mpl_vector| replace:: ``boost::mpl::vector`` +.. |boost_mpl_vector| replace:: ``boost\:\:mpl\:\:vector`` .. _boost_mpl_vector: ../../../mpl/doc/refmanual/vector.html :Defined in: `boost/parameter/parameters.hpp`__ @@ -1685,32 +2297,67 @@ __ ../../../../boost/parameter/parameters.hpp ``BOOST_PARAMETER_MAX_ARITY`` ----------------------------- -Determines the maximum number of arguments supported by the library. If the -`MPL Variadic Sequence`_ underlying the nested ``parameter_spec`` type of -|parameters| does not have a size limit--which is the case with +Determines the maximum number of arguments supported by the library. + +If |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is ``#defined``, then: + +\*. If the `MPL Variadic Sequence`_ underlying the nested ``parameter_spec`` +type of |parameters| does not have a size limit--which is the case with |boost_fusion_list|_ and |boost_fusion_deque|_, but not |boost_mpl_vector|_--then this macro can be safely ignored. User code that manually defines |BOOST_PARAMETER_VARIADIC_MPL_SEQUENCE| should also manually define this macro to the size limit of the sequence if it has one. +If |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| is **not** ``#defined``, then: + +\*. Mutable references must be wrapped by |boost_ref|_ or |std_ref|_ if passed +by position to Boost.Parameter-enabled functions with arity greater than or +equal to ``BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY``. + +.. |BOOST_PARAMETER_HAS_PERFECT_FORWARDING| replace:: ``BOOST_PARAMETER_HAS_PERFECT_FORWARDING`` .. |BOOST_PARAMETER_VARIADIC_MPL_SEQUENCE| replace:: ``BOOST_PARAMETER_VARIADIC_MPL_SEQUENCE`` +.. |BOOST_PARAMETER_MAX_ARITY| replace:: ``BOOST_PARAMETER_MAX_ARITY`` .. _`MPL Variadic Sequence`: ../../../mpl/doc/refmanual/variadic-sequence.html -.. |boost_fusion_list| replace:: ``boost::fusion::list`` +.. |boost_fusion_list| replace:: ``boost\:\:fusion\:\:list`` .. _boost_fusion_list: ../../../fusion/doc/html/fusion/container/list.html -.. |boost_fusion_deque| replace:: ``boost::fusion::deque`` +.. |boost_fusion_deque| replace:: ``boost\:\:fusion\:\:deque`` .. _boost_fusion_deque: ../../../fusion/doc/html/fusion/container/deque.html -.. |boost_mpl_vector| replace:: ``boost::mpl::vector`` +.. |boost_mpl_vector| replace:: ``boost\:\:mpl\:\:vector`` .. _boost_mpl_vector: ../../../mpl/doc/refmanual/vector.html +.. |boost_ref| replace:: ``boost\:\:ref`` +.. _boost_ref: ../../../core/doc/html/core/ref.html +.. |std_ref| replace:: ``std\:\:ref`` +.. _std_ref: http://en.cppreference.com/w/cpp/utility/functional/ref :Defined in: `boost/parameter/config.hpp`__ __ ../../../../boost/parameter/config.hpp -:Default Value: |BOOST_MPL_LIMIT_VECTOR_SIZE|_ +:Default Value: |BOOST_MPL_LIMIT_VECTOR_SIZE|_ if perfect forwarding is supported, ``8`` otherwise. +:Minimum Value: ``2`` .. |BOOST_MPL_LIMIT_VECTOR_SIZE| replace:: ``BOOST_MPL_LIMIT_VECTOR_SIZE`` .. _BOOST_MPL_LIMIT_VECTOR_SIZE: ../../../mpl/doc/refmanual/limit-vector-size.html +``BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY`` +-------------------------------------------------------- + +If this library does **not** support perfect forwarding, determines the number +of arguments less than which |parameters| generates an exponential number of +function call operator overloads, and greater than or equal to which +|parameters| does not. Will only be ``#defined`` by the library if it is +not already ``#defined`` and ``BOOST_PARAMETER_HAS_PERFECT_FORWARDING`` is +**not** ``#defined``. + +.. |BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY| replace:: ``BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY`` + +:Defined in: `boost/parameter/config.hpp`__ + +__ ../../../../boost/parameter/config.hpp + +:Default Value: ``11`` +:Minimum Value: ``1`` + Tutorial ======== diff --git a/include/boost/parameter.hpp b/include/boost/parameter.hpp index 26b8453..af98339 100644 --- a/include/boost/parameter.hpp +++ b/include/boost/parameter.hpp @@ -9,6 +9,9 @@ #define BOOST_PARAMETER_050401_HPP #include +#include +#include +#include #include #include #include diff --git a/include/boost/parameter/aux_/arg_list.hpp b/include/boost/parameter/aux_/arg_list.hpp index b7bd58e..637c1d5 100755 --- a/include/boost/parameter/aux_/arg_list.hpp +++ b/include/boost/parameter/aux_/arg_list.hpp @@ -7,8 +7,6 @@ #ifndef ARG_LIST_050329_HPP #define ARG_LIST_050329_HPP -#include - namespace boost { namespace parameter { namespace aux { // @@ -29,6 +27,13 @@ namespace boost { namespace parameter { namespace aux { { typedef typename T::reference type; }; +}}} // namespace boost::parameter::aux + +#include + +#if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) + +namespace boost { namespace parameter { namespace aux { struct value_type_is_void { @@ -39,10 +44,15 @@ namespace boost { namespace parameter { namespace aux { }; }}} // namespace boost::parameter::aux +#endif + #include #include #include #include + +#if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) + #include namespace boost { namespace parameter { namespace aux { @@ -79,22 +89,6 @@ namespace boost { namespace parameter { namespace aux { template static ::boost::parameter::aux::no_tag has_key(KW*); -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - // The overload set technique doesn't work with these older compilers, - // so they need some explicit handholding. - - // A metafunction class that, given a keyword, returns the type of the - // base sublist whose get() function can produce the value for that key. - struct key_owner - { - template - struct apply - { - typedef ::boost::parameter::aux::empty_arg_list type; - }; - }; -#endif // Borland workarounds needed. - // If either of these operators are called, it means there is no // argument in the list that matches the supplied keyword. Just // return the default value. @@ -149,10 +143,7 @@ namespace boost { namespace parameter { namespace aux { #include #include #include - -#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) #include -#endif namespace boost { namespace parameter { namespace aux { @@ -280,6 +271,342 @@ namespace boost { namespace parameter { namespace aux { }; }; + // Overload for key_type, so the assert below will fire + // if the same keyword is used again. + static ::boost::parameter::aux::yes_tag has_key(key_type*); + using Next::has_key; + + BOOST_MPL_ASSERT_MSG( + sizeof( + Next::has_key( + static_cast (BOOST_TTI_DETAIL_NULLPTR) + ) + ) == sizeof(::boost::parameter::aux::no_tag) + , duplicate_keyword + , (key_type) + ); + + // + // Begin implementation of indexing operators + // for looking up specific arguments by name. + // + + // Helpers that handle the case when TaggedArg is empty . + template + inline reference get_default(D const&, ::boost::mpl::false_) const + { + return this->arg.get_value(); + } + + template + inline reference get_default(D const& d, ::boost::mpl::true_) const + { + return ( + this->arg.get_value() + ? this->arg.get_value().get() + : this->arg.get_value().construct(d.value) + ); + } + + inline reference + operator[](::boost::parameter::keyword const&) const + { + BOOST_MPL_ASSERT_NOT((holds_maybe)); + return this->arg.get_value(); + } + + template + inline reference + operator[]( + ::boost::parameter::aux::default_ const& d + ) const + { + return this->get_default(d, holds_maybe()); + } + + template + inline reference + operator[]( + ::boost::parameter::aux::default_r_ const& d + ) const + { + return this->get_default(d, holds_maybe()); + } + + template + inline reference + operator[]( + BOOST_PARAMETER_lazy_default_fallback const& + ) const + { + BOOST_MPL_ASSERT_NOT((holds_maybe)); + return this->arg.get_value(); + } + + // Builds an overload set including operator[]s defined + // in base classes. + using Next::operator[]; + + // + // End of indexing support + // + + // For parameter_requirements matching this node's key_type, return + // a bool constant wrapper indicating whether the requirements are + // satisfied by TaggedArg. Used only for compile-time computation + // and never really called, so a declaration is enough. + template + static typename ::boost::mpl::apply_wrap2< + ::boost::parameter::aux + ::augment_predicate + , value_type + , ArgPack + >::type + satisfies( + ::boost::parameter::aux::parameter_requirements< + key_type + , Predicate + , HasDefault + >* + , ArgPack* + ); + + // Builds an overload set including satisfies functions defined + // in base classes. + using Next::satisfies; + + // Comma operator to compose argument list without using parameters<>. + // Useful for argument lists with undetermined length. + template + inline ::boost::parameter::aux::arg_list< + ::boost::parameter::aux::tagged_argument + , self + > + operator,( + ::boost::parameter::aux::tagged_argument const& x + ) const + { + return ::boost::parameter::aux::arg_list< + ::boost::parameter::aux::tagged_argument + , self + >(x, *this); + } + + template + inline ::boost::parameter::aux::arg_list< + ::boost::parameter::aux::tagged_argument_rref + , self + > + operator,( + ::boost::parameter::aux::tagged_argument_rref const& x + ) const + { + return ::boost::parameter::aux::arg_list< + ::boost::parameter::aux::tagged_argument_rref + , self + >(x, *this); + } + + // MPL sequence support + typedef self type; // Convenience for users + typedef Next tail_type; // For the benefit of iterators + // For dispatching to sequence intrinsics + typedef ::boost::parameter::aux::arg_list_tag tag; + }; +}}} // namespace boost::parameter::aux + +#else // !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) + +#include +#include + +namespace boost { namespace parameter { namespace aux { + + // Terminates arg_list<> and represents an empty list. Since this is just + // the terminating case, you might want to look at arg_list first to get a + // feel for what's really happening here. + struct empty_arg_list + { + inline empty_arg_list() + { + } + + // Constructor taking BOOST_PARAMETER_MAX_ARITY empty_arg_list + // arguments; this makes initialization. + inline empty_arg_list( + BOOST_PP_ENUM_PARAMS( + BOOST_PARAMETER_MAX_ARITY + , ::boost::parameter::void_ BOOST_PP_INTERCEPT + ) + ) + { + } + + // A metafunction class that, given a keyword and a default type, + // returns the appropriate result type for a keyword lookup given + // that default. + struct binding + { + template + struct apply + { + typedef Default type; + }; + }; + + // Terminator for has_key, indicating that the keyword is unique. + template + static ::boost::parameter::aux::no_tag has_key(KW*); + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + // The overload set technique doesn't work with these older compilers, + // so they need some explicit handholding. + + // A metafunction class that, given a keyword, returns the type of the + // base sublist whose get() function can produce the value for that key. + struct key_owner + { + template + struct apply + { + typedef ::boost::parameter::aux::empty_arg_list type; + }; + }; +#endif // Borland workarounds needed. + + // If either of these operators are called, it means there is no + // argument in the list that matches the supplied keyword. Just + // return the default value. + template + inline Default& + operator[](::boost::parameter::aux::default_ x) const + { + return x.value; + } + + // If this operator is called, it means there is no argument in the + // list that matches the supplied keyword. Just evaluate and return + // the default value. + template + inline typename ::boost::parameter::aux::result_of0 ::type + operator[](BOOST_PARAMETER_lazy_default_fallback x) const + { + return x.compute_default(); + } + + // No argument corresponding to ParameterRequirements::key_type + // was found if we match this overload, so unless that parameter + // has a default, we indicate that the actual arguments don't + // match the function's requirements. + template + static typename ParameterRequirements::has_default + satisfies(ParameterRequirements*, ArgPack*); + + // MPL sequence support + typedef ::boost::parameter::aux::empty_arg_list type; // convenience + // For dispatching to sequence intrinsics + typedef ::boost::parameter::aux::arg_list_tag tag; + }; +}}} // namespace boost::parameter::aux + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) +#include +#endif + +namespace boost { namespace parameter { namespace aux { + + // A tuple of tagged arguments, terminated with empty_arg_list. Every + // TaggedArg is an instance of tagged_argument<>. + template < + typename TaggedArg + , typename Next = ::boost::parameter::aux::empty_arg_list + > + struct arg_list : Next + { + typedef TaggedArg tagged_arg; + typedef ::boost::parameter::aux::arg_list self; + typedef typename TaggedArg::key_type key_type; + + typedef typename ::boost::parameter::aux + ::is_maybe ::type holds_maybe; + + typedef typename ::boost::mpl::eval_if< + holds_maybe + , ::boost::parameter::aux + ::get_reference + , ::boost::parameter::aux::get_reference + >::type reference; + + typedef typename ::boost::mpl::if_< + holds_maybe + , reference + , typename TaggedArg::value_type + >::type value_type; + + TaggedArg arg; // Stores the argument + + // Create a new list by prepending arg to a copy of tail. Used when + // incrementally building this structure with the comma operator. + inline arg_list(TaggedArg const& head, Next const& tail) + : Next(tail), arg(head) + { + } + + // Store the arguments in successive nodes of this list. + template < + // typename A0, typename A1, ... + BOOST_PP_ENUM_PARAMS(BOOST_PARAMETER_MAX_ARITY, typename A) + > + inline arg_list( + // A0& a0, A1& a1, ... + BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PARAMETER_MAX_ARITY, A, & a) + ) : Next( + // a1, a2, ... + BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PARAMETER_MAX_ARITY, a) + , ::boost::parameter::aux::void_reference() + ) + , arg(a0) + { + } + + // A metafunction class that, given a keyword and a default type, + // returns the appropriate result type for a keyword lookup given + // that default. + struct binding + { + typedef typename Next::binding next_binding; + + template + struct apply + { + typedef typename ::boost::mpl::eval_if< + ::boost::is_same + , ::boost::mpl::if_ + , ::boost::mpl::apply_wrap3< + next_binding + , KW + , Default + , Reference + > + >::type type; + }; + }; + #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) // Overload for key_type, so the assert below will fire // if the same keyword is used again. @@ -375,22 +702,6 @@ namespace boost { namespace parameter { namespace aux { return sublist.get(x); } - template - inline typename ::boost::mpl::apply_wrap3< - binding - , KW - , Default&& - , ::boost::mpl::true_ - >::type - operator[]( - ::boost::parameter::aux::default_r_ const& x - ) const - { - typename ::boost::mpl::apply_wrap1 ::type const& - sublist = *this; - return sublist.get(x); - } - template inline typename ::boost::mpl::apply_wrap3< binding @@ -427,15 +738,6 @@ namespace boost { namespace parameter { namespace aux { return this->get_default(d, holds_maybe()); } - template - inline reference - get( - ::boost::parameter::aux::default_r_ const& d - ) const - { - return this->get_default(d, holds_maybe()); - } - template inline reference get( @@ -461,15 +763,6 @@ namespace boost { namespace parameter { namespace aux { return this->get_default(d, holds_maybe()); } - template - inline reference - operator[]( - ::boost::parameter::aux::default_r_ const& d - ) const - { - return this->get_default(d, holds_maybe()); - } - template inline reference operator[]( @@ -530,21 +823,6 @@ namespace boost { namespace parameter { namespace aux { >(x, *this); } - template - inline ::boost::parameter::aux::arg_list< - ::boost::parameter::aux::tagged_argument_rref - , self - > - operator,( - ::boost::parameter::aux::tagged_argument_rref const& x - ) const - { - return ::boost::parameter::aux::arg_list< - ::boost::parameter::aux::tagged_argument_rref - , self - >(x, *this); - } - // MPL sequence support typedef self type; // Convenience for users typedef Next tail_type; // For the benefit of iterators @@ -553,6 +831,8 @@ namespace boost { namespace parameter { namespace aux { }; }}} // namespace boost::parameter::aux +#endif // BOOST_PARAMETER_HAS_PERFECT_FORWARDING + #include namespace boost { namespace parameter { namespace aux { diff --git a/include/boost/parameter/aux_/as_lvalue.hpp b/include/boost/parameter/aux_/as_lvalue.hpp new file mode 100755 index 0000000..d50b897 --- /dev/null +++ b/include/boost/parameter/aux_/as_lvalue.hpp @@ -0,0 +1,25 @@ +// Copyright Daniel Wallin 2006. +// 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_PARAMETER_AUX_AS_LVALUE_HPP +#define BOOST_PARAMETER_AUX_AS_LVALUE_HPP + +namespace boost { namespace parameter { namespace aux { + + template + T const& as_lvalue(T const& value) + { + return value; + } + + template + T& as_lvalue(T& value) + { + return value; + } +}}} // namespace boost::parameter::aux + +#endif // include guard + diff --git a/include/boost/parameter/aux_/default.hpp b/include/boost/parameter/aux_/default.hpp index 25eab3e..be31b48 100755 --- a/include/boost/parameter/aux_/default.hpp +++ b/include/boost/parameter/aux_/default.hpp @@ -7,8 +7,6 @@ #ifndef DEFAULT_050329_HPP #define DEFAULT_050329_HPP -#include - namespace boost { namespace parameter { namespace aux { // A wrapper for the default value passed by the user when resolving @@ -22,6 +20,11 @@ namespace boost { namespace parameter { namespace aux { Value& value; }; +}}} // namespace boost::parameter::aux + +#include + +namespace boost { namespace parameter { namespace aux { // lazy_default -- A wrapper for the default value computation function // passed by the user when resolving the value of the parameter with the @@ -73,6 +76,8 @@ namespace boost { namespace parameter { namespace aux { /**/ #endif +#if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) + #include namespace boost { namespace parameter { namespace aux { @@ -88,5 +93,6 @@ namespace boost { namespace parameter { namespace aux { }; }}} // namespace boost::parameter::aux +#endif // BOOST_PARAMETER_HAS_PERFECT_FORWARDING #endif // include guard diff --git a/include/boost/parameter/aux_/is_tagged_argument.hpp b/include/boost/parameter/aux_/is_tagged_argument.hpp index cbd762f..61dccef 100755 --- a/include/boost/parameter/aux_/is_tagged_argument.hpp +++ b/include/boost/parameter/aux_/is_tagged_argument.hpp @@ -14,8 +14,13 @@ namespace boost { namespace parameter { namespace aux { }; }}} // namespace boost::parameter::aux +#include #include #include + +#if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) || \ + (0 < BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY) + #include #include #include @@ -27,6 +32,8 @@ namespace boost { namespace parameter { namespace aux { template struct is_tagged_argument : ::boost::mpl::if_< + // Cannot use is_convertible<> to check if T is derived from + // tagged_argument_base. -- Cromwell D. Enage ::boost::is_base_of< ::boost::parameter::aux::tagged_argument_base , typename ::boost::remove_const< @@ -40,5 +47,35 @@ namespace boost { namespace parameter { namespace aux { }; }}} // namespace boost::parameter::aux +#else // no perfect forwarding support and no exponential overloads + +#include +#include + +namespace boost { namespace parameter { namespace aux { + + template + struct is_tagged_argument_aux + : ::boost::is_convertible< + T* + , ::boost::parameter::aux::tagged_argument_base const* + > + { + }; + + // This metafunction identifies tagged_argument specializations + // and their derived classes. + template + struct is_tagged_argument + : ::boost::mpl::if_< + ::boost::is_lvalue_reference + , ::boost::mpl::false_ + , ::boost::parameter::aux::is_tagged_argument_aux + >::type + { + }; +}}} // namespace boost::parameter::aux + +#endif // perfect forwarding support, or exponential overloads #endif // include guard diff --git a/include/boost/parameter/aux_/pack/make_arg_list.hpp b/include/boost/parameter/aux_/pack/make_arg_list.hpp index 17eb0ed..d80e3f4 100755 --- a/include/boost/parameter/aux_/pack/make_arg_list.hpp +++ b/include/boost/parameter/aux_/pack/make_arg_list.hpp @@ -28,6 +28,7 @@ namespace boost { namespace parameter { namespace aux { #include #include #include +#include #include #include #include @@ -37,8 +38,6 @@ namespace boost { namespace parameter { namespace aux { #include #include #include -#include -#include namespace boost { namespace parameter { namespace aux { diff --git a/include/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp b/include/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp new file mode 100755 index 0000000..1868ce1 --- /dev/null +++ b/include/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp @@ -0,0 +1,61 @@ +// Copyright David Abrahams, Daniel Wallin 2003. +// 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_PARAMETER_AUX_PACK_TAG_KEYWORD_ARG_REF_HPP +#define BOOST_PARAMETER_AUX_PACK_TAG_KEYWORD_ARG_REF_HPP + +#include +#include + +namespace boost { namespace parameter { namespace aux { + + template < + typename Keyword + , typename ActualArg +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + , typename = typename ::boost::parameter::aux + ::is_cv_reference_wrapper ::type +#endif + > + struct tag_ref + { + typedef ::boost::parameter::aux::tagged_argument< + Keyword + , typename ::boost::parameter::aux + ::unwrap_cv_reference ::type + > type; + }; +}}} // namespace boost::parameter::aux_ + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) + +#include + +namespace boost { namespace parameter { namespace aux { + + template + struct tag_ref + { + typedef ::boost::parameter::aux + ::tagged_argument type; + }; +}}} // namespace boost::parameter::aux_ + +#endif // Borland workarounds needed. + +namespace boost { namespace parameter { namespace aux { + + struct tag_keyword_arg_ref + { + template + struct apply + { + typedef typename ::boost::parameter::aux::tag_ref ::type type; + }; + }; +}}} // namespace boost::parameter::aux + +#endif // include guard + diff --git a/include/boost/parameter/aux_/pp_impl/argument_pack.hpp b/include/boost/parameter/aux_/pp_impl/argument_pack.hpp index 9655818..604009b 100755 --- a/include/boost/parameter/aux_/pp_impl/argument_pack.hpp +++ b/include/boost/parameter/aux_/pp_impl/argument_pack.hpp @@ -9,9 +9,13 @@ #include #include -#include +#include #include +#if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) + +#include + namespace boost { namespace parameter { namespace aux { template @@ -30,5 +34,43 @@ namespace boost { namespace parameter { namespace aux { }; }}} // namespace boost::parameter::aux +#else // !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) + +#include +#include +#include +#include +#include + +namespace boost { namespace parameter { namespace aux { + + template < + typename Parameters + BOOST_PP_ENUM_TRAILING_BINARY_PARAMS( + BOOST_PARAMETER_MAX_ARITY + , typename A + , = ::boost::parameter::void_ BOOST_PP_INTERCEPT + ) + > + struct argument_pack + { + typedef typename ::boost::parameter::aux::make_arg_list< + typename BOOST_PARAMETER_build_arg_list( + BOOST_PARAMETER_MAX_ARITY + , ::boost::parameter::aux::make_items + , typename Parameters::parameter_spec + , A + )::type + , typename Parameters::deduced_list + , ::boost::parameter::aux::tag_keyword_arg + , ::boost::mpl::false_ + >::type result; + typedef typename ::boost::mpl::first ::type type; + }; +}}} // namespace boost::parameter::aux + +#include + +#endif // BOOST_PARAMETER_HAS_PERFECT_FORWARDING #endif // include guard diff --git a/include/boost/parameter/aux_/pp_impl/match.hpp b/include/boost/parameter/aux_/pp_impl/match.hpp index 1a719e1..a903975 100755 --- a/include/boost/parameter/aux_/pp_impl/match.hpp +++ b/include/boost/parameter/aux_/pp_impl/match.hpp @@ -9,10 +9,13 @@ #include +#if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) + namespace boost { namespace parameter { namespace aux { // Recast the ParameterSpec's nested match metafunction // as a free metafunction. + // // No more limits set by BOOST_PARAMETER_MAX_ARITY. -- Cromwell D. Enage template struct match : Parameters::BOOST_NESTED_TEMPLATE match @@ -20,5 +23,33 @@ namespace boost { namespace parameter { namespace aux { }; }}} // namespace boost::parameter::aux +#else + +#include +#include +#include +#include + +namespace boost { namespace parameter { namespace aux { + + // Recast the ParameterSpec's nested match metafunction + // as a free metafunction. + template < + typename Parameters + BOOST_PP_ENUM_TRAILING_BINARY_PARAMS( + BOOST_PARAMETER_MAX_ARITY + , typename A + , = ::boost::parameter::void_ BOOST_PP_INTERCEPT + ) + > + struct match + : Parameters::BOOST_NESTED_TEMPLATE match< + BOOST_PP_ENUM_PARAMS(BOOST_PARAMETER_MAX_ARITY, A) + > + { + }; +}}} // namespace boost::parameter::aux + +#endif // BOOST_PARAMETER_HAS_PERFECT_FORWARDING #endif // include guard diff --git a/include/boost/parameter/aux_/pp_impl/unwrap_predicate.hpp b/include/boost/parameter/aux_/pp_impl/unwrap_predicate.hpp index dcefc35..8306434 100755 --- a/include/boost/parameter/aux_/pp_impl/unwrap_predicate.hpp +++ b/include/boost/parameter/aux_/pp_impl/unwrap_predicate.hpp @@ -27,8 +27,7 @@ namespace boost { namespace parameter { namespace aux { }; }}} // namespace boost::parameter::aux -#include -#include +#include #if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580)) #include diff --git a/include/boost/parameter/aux_/preprocessor/binary_seq_for_each.hpp b/include/boost/parameter/aux_/preprocessor/binary_seq_for_each.hpp new file mode 100755 index 0000000..700d918 --- /dev/null +++ b/include/boost/parameter/aux_/preprocessor/binary_seq_for_each.hpp @@ -0,0 +1,1638 @@ +// Copyright Cromwell D. Enage 2017. +// 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_PARAMETER_AUX_PREPROCESSOR_BINARY_SEQ_FOR_EACH_HPP +#define BOOST_PARAMETER_AUX_PREPROCESSOR_BINARY_SEQ_FOR_EACH_HPP + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_0(macro, data) +/**/ + +#include +#include +#include + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_1(macro, data) \ + BOOST_PP_FOR( \ + (data)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_2 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_1_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_2(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_3 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_1_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_3(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_4 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_1_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_4(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_5 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_1_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_5(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_6 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_1_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_6(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_7 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_1_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_7(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_8 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_1_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_8(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_9 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_2_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_9 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_2_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_9(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_10 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_3_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_10 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_3_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_10 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_3_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_10 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_3_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_10(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_11 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_4_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_11 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_4_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_11 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_4_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_11 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_4_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_11 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_4_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_11 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_4_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_11 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_4_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_11 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_4_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_11(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_12 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_5_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_12(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_13 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_6_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_13(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_14 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_7_N \ + , macro \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_14(macro, data) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(0)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(1)(0)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(0)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(0)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(0)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(0)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(0)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(0)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(0)(1)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(0)(1)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(0)(1)(1)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) \ + BOOST_PP_FOR( \ + (data)(1)(1)(1)(1)(1)(1)(1)(0)(0)(0)(0)(0)(0)(0) \ + , BOOST_PARAMETER_AUX_PP_FOR_EACH_PRED_15 \ + , BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_INC_8_N \ + , macro \ + ) +/**/ + +#include +#include + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH(n, seq) \ + BOOST_PP_CAT(BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_, n)( \ + BOOST_PP_SEQ_ELEM(0, seq), BOOST_PP_SEQ_ELEM(1, seq) \ + ) +/**/ + +#define BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH_Z(z, n, seq) \ + BOOST_PARAMETER_AUX_PP_BINARY_SEQ_FOR_EACH(n, seq) +/**/ + +#endif // include guard + diff --git a/include/boost/parameter/aux_/preprocessor/binary_seq_for_each_inc.hpp b/include/boost/parameter/aux_/preprocessor/binary_seq_for_each_inc.hpp new file mode 100755 index 0000000..7e97546 --- /dev/null +++ b/include/boost/parameter/aux_/preprocessor/binary_seq_for_each_inc.hpp @@ -0,0 +1,1796 @@ +// Copyright Cromwell D. Enage 2017. +// 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_PARAMETER_AUX_PREPROCESSOR_BINARY_SEQ_FOR_EACH_INC_HPP +#define BOOST_PARAMETER_AUX_PREPROCESSOR_BINARY_SEQ_FOR_EACH_INC_HPP + +#include +#include