From 9b3e6a2cd6b857b6637a794a95c75d8f4e001be9 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Wed, 19 Dec 2018 22:09:23 -0500 Subject: [PATCH 01/14] Updated for b2 cmake support. --- .travis.yml | 2 ++ appveyor.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index dd85603..cda9b52 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,6 +33,8 @@ install: - git submodule update --init tools/build - git submodule update --init libs/config - git submodule update --init tools/boostdep + - git submodule update --init tools/boost_install + - git submodule update --init libs/headers - cp -r $TRAVIS_BUILD_DIR/* libs/preprocessor - python tools/boostdep/depinst/depinst.py preprocessor - ./bootstrap.sh diff --git a/appveyor.yml b/appveyor.yml index 3d07613..b43326f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -49,6 +49,8 @@ for: - git submodule update --init tools/build - git submodule update --init libs/config - git submodule update --init tools/boostdep + - git submodule update --init tools/boost_install + - git submodule update --init libs/headers - xcopy /s /e /q %APPVEYOR_BUILD_FOLDER% libs\preprocessor - python tools/boostdep/depinst/depinst.py preprocessor - bootstrap From 5756fb08adcd0cdfc2b8c130086e19f7572b32b9 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Tue, 27 Aug 2019 01:29:21 -0400 Subject: [PATCH 02/14] Fixed inspect report problems: tabs and lack of copyright notices, and a few other small html file errors. --- doc/ref/list_to_array_d.html | 8 ++ doc/ref/list_to_seq_r.html | 7 ++ doc/ref/tuple_elem.html | 2 +- .../preprocessor/array/detail/get_data.hpp | 40 +++++----- include/boost/preprocessor/array/to_list.hpp | 14 ++-- include/boost/preprocessor/array/to_seq.hpp | 14 ++-- include/boost/preprocessor/array/to_tuple.hpp | 14 ++-- .../facilities/detail/is_empty.hpp | 6 +- include/boost/preprocessor/list/to_array.hpp | 32 ++++---- include/boost/preprocessor/list/to_tuple.hpp | 28 +++---- include/boost/preprocessor/repetition/for.hpp | 14 ++-- .../seq/detail/binary_transform.hpp | 6 +- .../preprocessor/seq/detail/is_empty.hpp | 22 +++--- include/boost/preprocessor/seq/for_each.hpp | 54 ++++++------- include/boost/preprocessor/seq/for_each_i.hpp | 56 ++++++------- include/boost/preprocessor/seq/replace.hpp | 14 ++-- include/boost/preprocessor/seq/rest_n.hpp | 18 ++--- .../tuple/detail/is_single_return.hpp | 6 +- include/boost/preprocessor/tuple/elem.hpp | 8 +- include/boost/preprocessor/tuple/insert.hpp | 4 +- include/boost/preprocessor/tuple/pop_back.hpp | 32 ++++---- .../boost/preprocessor/tuple/pop_front.hpp | 32 ++++---- .../boost/preprocessor/tuple/push_back.hpp | 2 +- .../boost/preprocessor/tuple/push_front.hpp | 2 +- include/boost/preprocessor/tuple/rem.hpp | 20 ++--- include/boost/preprocessor/tuple/remove.hpp | 32 ++++---- include/boost/preprocessor/tuple/replace.hpp | 4 +- include/boost/preprocessor/tuple/reverse.hpp | 4 +- include/boost/preprocessor/tuple/to_list.hpp | 4 +- include/boost/preprocessor/tuple/to_seq.hpp | 4 +- .../variadic/detail/is_single_return.hpp | 6 +- test/config_info.cpp | 11 +++ test/seq.cxx | 78 +++++++++---------- test/tuple_elem_bug_test.cxx | 26 +++---- 34 files changed, 325 insertions(+), 299 deletions(-) diff --git a/doc/ref/list_to_array_d.html b/doc/ref/list_to_array_d.html index 835d9e2..11ca731 100644 --- a/doc/ref/list_to_array_d.html +++ b/doc/ref/list_to_array_d.html @@ -30,5 +30,13 @@

Requirements

Header:  <boost/preprocessor/list/to_array.hpp>
+
+
© Copyright Edward Diener 2011 +
+
+

Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

+
diff --git a/doc/ref/list_to_seq_r.html b/doc/ref/list_to_seq_r.html index cc7a854..83b42a6 100644 --- a/doc/ref/list_to_seq_r.html +++ b/doc/ref/list_to_seq_r.html @@ -28,5 +28,12 @@

Requirements

Header:  <boost/preprocessor/list/to_seq.hpp>
+
+
© Copyright Edward Diener 2011
+
+

Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt + or copy at www.boost.org/LICENSE_1_0.txt)

+
diff --git a/doc/ref/tuple_elem.html b/doc/ref/tuple_elem.html index 0f4885f..ac57f3f 100644 --- a/doc/ref/tuple_elem.html +++ b/doc/ref/tuple_elem.html @@ -49,7 +49,7 @@ or
Header:  <boost/preprocessor/tuple/elem.hpp>

Sample Code

-
#include <boost/preprocessor/tuple/elem.hpp>

#define TUPLE (a, b, c, d)

BOOST_PP_TUPLE_ELEM(4, 0, TUPLE) // expands to a
BOOST_PP_TUPLE_ELEM(4, 3, TUPLE) // expands to d

// or for the variadic version (v)

BOOST_PP_TUPLE_ELEM(0, TUPLE) // expands to a in the variadic version
BOOST_PP_TUPLE_ELEM(3, TUPLE) // expands to d in the variadic version
+
#include <boost/preprocessor/tuple/elem.hpp>

#define TUPLE (a, b, c, d)

BOOST_PP_TUPLE_ELEM(4, 0, TUPLE) // expands to a
BOOST_PP_TUPLE_ELEM(4, 3, TUPLE) // expands to d

// or for the variadic version (v)

BOOST_PP_TUPLE_ELEM(0, TUPLE) // expands to a in the variadic version
BOOST_PP_TUPLE_ELEM(3, TUPLE) // expands to d in the variadic version

© Copyright Housemarque Oy 2002 diff --git a/include/boost/preprocessor/array/detail/get_data.hpp b/include/boost/preprocessor/array/detail/get_data.hpp index 15ae740..9d990ba 100644 --- a/include/boost/preprocessor/array/detail/get_data.hpp +++ b/include/boost/preprocessor/array/detail/get_data.hpp @@ -23,33 +23,33 @@ # define BOOST_PP_ARRAY_DETAIL_GET_DATA_NONE(size, data) # if BOOST_PP_VARIADICS && !(BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400) -# if BOOST_PP_VARIADICS_MSVC -# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_DEFAULT(size, data) BOOST_PP_TUPLE_REM(size) data -# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_CAT(size, data) BOOST_PP_TUPLE_REM_CAT(size) data -# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY(size, data) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_IS_1(size), \ - BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_CAT, \ - BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_DEFAULT \ - ) \ - (size,data) \ +# if BOOST_PP_VARIADICS_MSVC +# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_DEFAULT(size, data) BOOST_PP_TUPLE_REM(size) data +# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_CAT(size, data) BOOST_PP_TUPLE_REM_CAT(size) data +# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY(size, data) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_IS_1(size), \ + BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_CAT, \ + BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_DEFAULT \ + ) \ + (size,data) \ /**/ # else -# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY(size, data) BOOST_PP_TUPLE_REM(size) data +# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY(size, data) BOOST_PP_TUPLE_REM(size) data # endif # else -# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY(size, data) BOOST_PP_TUPLE_REM(size) data +# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY(size, data) BOOST_PP_TUPLE_REM(size) data # endif # define BOOST_PP_ARRAY_DETAIL_GET_DATA(size, data) \ - BOOST_PP_IF \ - ( \ - size, \ - BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY, \ - BOOST_PP_ARRAY_DETAIL_GET_DATA_NONE \ - ) \ - (size,data) \ + BOOST_PP_IF \ + ( \ + size, \ + BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY, \ + BOOST_PP_ARRAY_DETAIL_GET_DATA_NONE \ + ) \ + (size,data) \ /**/ # # endif /* BOOST_PREPROCESSOR_ARRAY_DETAIL_GET_DATA_HPP */ diff --git a/include/boost/preprocessor/array/to_list.hpp b/include/boost/preprocessor/array/to_list.hpp index 4cb45b6..10f7a87 100644 --- a/include/boost/preprocessor/array/to_list.hpp +++ b/include/boost/preprocessor/array/to_list.hpp @@ -22,13 +22,13 @@ # /* BOOST_PP_ARRAY_TO_LIST */ # # define BOOST_PP_ARRAY_TO_LIST(array) \ - BOOST_PP_IF \ - ( \ - BOOST_PP_ARRAY_SIZE(array), \ - BOOST_PP_ARRAY_TO_LIST_DO, \ - BOOST_PP_ARRAY_TO_LIST_EMPTY \ - ) \ - (array) \ + BOOST_PP_IF \ + ( \ + BOOST_PP_ARRAY_SIZE(array), \ + BOOST_PP_ARRAY_TO_LIST_DO, \ + BOOST_PP_ARRAY_TO_LIST_EMPTY \ + ) \ + (array) \ /**/ # # define BOOST_PP_ARRAY_TO_LIST_EMPTY(array) BOOST_PP_NIL diff --git a/include/boost/preprocessor/array/to_seq.hpp b/include/boost/preprocessor/array/to_seq.hpp index 7303f34..18285de 100644 --- a/include/boost/preprocessor/array/to_seq.hpp +++ b/include/boost/preprocessor/array/to_seq.hpp @@ -22,13 +22,13 @@ # /* BOOST_PP_ARRAY_TO_SEQ */ # # define BOOST_PP_ARRAY_TO_SEQ(array) \ - BOOST_PP_IF \ - ( \ - BOOST_PP_ARRAY_SIZE(array), \ - BOOST_PP_ARRAY_TO_SEQ_DO, \ - BOOST_PP_ARRAY_TO_SEQ_EMPTY \ - ) \ - (array) \ + BOOST_PP_IF \ + ( \ + BOOST_PP_ARRAY_SIZE(array), \ + BOOST_PP_ARRAY_TO_SEQ_DO, \ + BOOST_PP_ARRAY_TO_SEQ_EMPTY \ + ) \ + (array) \ /**/ # define BOOST_PP_ARRAY_TO_SEQ_EMPTY(array) # diff --git a/include/boost/preprocessor/array/to_tuple.hpp b/include/boost/preprocessor/array/to_tuple.hpp index 0d8defa..62bf709 100644 --- a/include/boost/preprocessor/array/to_tuple.hpp +++ b/include/boost/preprocessor/array/to_tuple.hpp @@ -20,13 +20,13 @@ # /* BOOST_PP_ARRAY_TO_TUPLE */ # # define BOOST_PP_ARRAY_TO_TUPLE(array) \ - BOOST_PP_IF \ - ( \ - BOOST_PP_ARRAY_SIZE(array), \ - BOOST_PP_ARRAY_DATA, \ - BOOST_PP_ARRAY_TO_TUPLE_EMPTY \ - ) \ - (array) \ + BOOST_PP_IF \ + ( \ + BOOST_PP_ARRAY_SIZE(array), \ + BOOST_PP_ARRAY_DATA, \ + BOOST_PP_ARRAY_TO_TUPLE_EMPTY \ + ) \ + (array) \ /**/ # define BOOST_PP_ARRAY_TO_TUPLE_EMPTY(array) # diff --git a/include/boost/preprocessor/facilities/detail/is_empty.hpp b/include/boost/preprocessor/facilities/detail/is_empty.hpp index e044970..ce16732 100644 --- a/include/boost/preprocessor/facilities/detail/is_empty.hpp +++ b/include/boost/preprocessor/facilities/detail/is_empty.hpp @@ -31,8 +31,8 @@ #if BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400 #define BOOST_PP_DETAIL_IS_EMPTY_PROCESS(param) \ - BOOST_PP_IS_BEGIN_PARENS \ - ( \ + BOOST_PP_IS_BEGIN_PARENS \ + ( \ BOOST_PP_DETAIL_IS_EMPTY_NON_FUNCTION_C param () \ ) \ /**/ @@ -40,7 +40,7 @@ #else #define BOOST_PP_DETAIL_IS_EMPTY_PROCESS(...) \ - BOOST_PP_IS_BEGIN_PARENS \ + BOOST_PP_IS_BEGIN_PARENS \ ( \ BOOST_PP_DETAIL_IS_EMPTY_NON_FUNCTION_C __VA_ARGS__ () \ ) \ diff --git a/include/boost/preprocessor/list/to_array.hpp b/include/boost/preprocessor/list/to_array.hpp index 20829b9..c0f8f33 100644 --- a/include/boost/preprocessor/list/to_array.hpp +++ b/include/boost/preprocessor/list/to_array.hpp @@ -28,13 +28,13 @@ # # if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC && (_MSC_VER <= 1400) # define BOOST_PP_LIST_TO_ARRAY(list) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_LIST_IS_NIL(list), \ - BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_EMPTY, \ - BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_DO \ - ) \ - (list) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_LIST_IS_NIL(list), \ + BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_EMPTY, \ + BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_DO \ + ) \ + (list) \ /**/ # define BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_EMPTY(list) (0,()) # define BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_DO(list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE, list) @@ -46,7 +46,7 @@ # define BOOST_PP_LIST_TO_ARRAY_I(w, list) \ BOOST_PP_LIST_TO_ARRAY_II(((BOOST_PP_TUPLE_REM_CTOR( \ 3, \ - w(BOOST_PP_LIST_TO_ARRAY_P, BOOST_PP_LIST_TO_ARRAY_O, (list, 1, (~))) \ + w(BOOST_PP_LIST_TO_ARRAY_P, BOOST_PP_LIST_TO_ARRAY_O, (list, 1, (~))) \ )))) \ /**/ # define BOOST_PP_LIST_TO_ARRAY_II(p) BOOST_PP_LIST_TO_ARRAY_II_B(p) @@ -56,7 +56,7 @@ # define BOOST_PP_LIST_TO_ARRAY_I(w, list) \ BOOST_PP_LIST_TO_ARRAY_II(BOOST_PP_TUPLE_REM_CTOR( \ 3, \ - w(BOOST_PP_LIST_TO_ARRAY_P, BOOST_PP_LIST_TO_ARRAY_O, (list, 1, (~))) \ + w(BOOST_PP_LIST_TO_ARRAY_P, BOOST_PP_LIST_TO_ARRAY_O, (list, 1, (~))) \ )) \ /**/ # define BOOST_PP_LIST_TO_ARRAY_II(im) BOOST_PP_LIST_TO_ARRAY_III(im) @@ -138,13 +138,13 @@ # # if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC && (_MSC_VER <= 1400) # define BOOST_PP_LIST_TO_ARRAY_D(d, list) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_LIST_IS_NIL(list), \ - BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_EMPTY, \ - BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_DO \ - ) \ - (d, list) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_LIST_IS_NIL(list), \ + BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_EMPTY, \ + BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_DO \ + ) \ + (d, list) \ /**/ # define BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_EMPTY(d, list) (0,()) # define BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_DO(d, list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE_ ## d, list) diff --git a/include/boost/preprocessor/list/to_tuple.hpp b/include/boost/preprocessor/list/to_tuple.hpp index c7b3da8..7af74a2 100644 --- a/include/boost/preprocessor/list/to_tuple.hpp +++ b/include/boost/preprocessor/list/to_tuple.hpp @@ -21,13 +21,13 @@ # /* BOOST_PP_LIST_TO_TUPLE */ # # define BOOST_PP_LIST_TO_TUPLE(list) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_LIST_IS_NIL(list), \ - BOOST_PP_LIST_TO_TUPLE_EMPTY, \ - BOOST_PP_LIST_TO_TUPLE_DO \ - ) \ - (list) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_LIST_IS_NIL(list), \ + BOOST_PP_LIST_TO_TUPLE_EMPTY, \ + BOOST_PP_LIST_TO_TUPLE_DO \ + ) \ + (list) \ /**/ # define BOOST_PP_LIST_TO_TUPLE_EMPTY(list) # @@ -41,13 +41,13 @@ # /* BOOST_PP_LIST_TO_TUPLE_R */ # # define BOOST_PP_LIST_TO_TUPLE_R(r, list) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_LIST_IS_NIL(list), \ - BOOST_PP_LIST_TO_TUPLE_R_EMPTY, \ - BOOST_PP_LIST_TO_TUPLE_R_DO \ - ) \ - (r, list) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_LIST_IS_NIL(list), \ + BOOST_PP_LIST_TO_TUPLE_R_EMPTY, \ + BOOST_PP_LIST_TO_TUPLE_R_DO \ + ) \ + (r, list) \ /**/ # define BOOST_PP_LIST_TO_TUPLE_R_EMPTY(r,list) # diff --git a/include/boost/preprocessor/repetition/for.hpp b/include/boost/preprocessor/repetition/for.hpp index c38946b..3c5048a 100644 --- a/include/boost/preprocessor/repetition/for.hpp +++ b/include/boost/preprocessor/repetition/for.hpp @@ -52,13 +52,13 @@ # define BOOST_PP_FOR_257_ERROR() BOOST_PP_ERROR(0x0002) # define BOOST_PP_FOR_257(s, p, o, m) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_FOR_257_PR(s,p), \ - BOOST_PP_FOR_257_ERROR, \ - BOOST_PP_EMPTY \ - ) \ - () \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_FOR_257_PR(s,p), \ + BOOST_PP_FOR_257_ERROR, \ + BOOST_PP_EMPTY \ + ) \ + () \ /**/ // # define BOOST_PP_FOR_257(s, p, o, m) BOOST_PP_ERROR(0x0002) # diff --git a/include/boost/preprocessor/seq/detail/binary_transform.hpp b/include/boost/preprocessor/seq/detail/binary_transform.hpp index 08b5f9d..2a118da 100644 --- a/include/boost/preprocessor/seq/detail/binary_transform.hpp +++ b/include/boost/preprocessor/seq/detail/binary_transform.hpp @@ -30,13 +30,13 @@ # endif # if BOOST_PP_VARIADICS # if BOOST_PP_VARIADICS_MSVC -# define BOOST_PP_SEQ_BINARY_TRANSFORM_REM(data) data +# define BOOST_PP_SEQ_BINARY_TRANSFORM_REM(data) data # define BOOST_PP_SEQ_BINARY_TRANSFORM_A(...) (BOOST_PP_SEQ_BINARY_TRANSFORM_REM, __VA_ARGS__)() BOOST_PP_SEQ_BINARY_TRANSFORM_B # define BOOST_PP_SEQ_BINARY_TRANSFORM_B(...) (BOOST_PP_SEQ_BINARY_TRANSFORM_REM, __VA_ARGS__)() BOOST_PP_SEQ_BINARY_TRANSFORM_A -# else +# else # define BOOST_PP_SEQ_BINARY_TRANSFORM_A(...) (BOOST_PP_REM, __VA_ARGS__)() BOOST_PP_SEQ_BINARY_TRANSFORM_B # define BOOST_PP_SEQ_BINARY_TRANSFORM_B(...) (BOOST_PP_REM, __VA_ARGS__)() BOOST_PP_SEQ_BINARY_TRANSFORM_A -# endif +# endif # else # define BOOST_PP_SEQ_BINARY_TRANSFORM_A(e) (BOOST_PP_REM, e)() BOOST_PP_SEQ_BINARY_TRANSFORM_B # define BOOST_PP_SEQ_BINARY_TRANSFORM_B(e) (BOOST_PP_REM, e)() BOOST_PP_SEQ_BINARY_TRANSFORM_A diff --git a/include/boost/preprocessor/seq/detail/is_empty.hpp b/include/boost/preprocessor/seq/detail/is_empty.hpp index 1a80a2f..14461ba 100644 --- a/include/boost/preprocessor/seq/detail/is_empty.hpp +++ b/include/boost/preprocessor/seq/detail/is_empty.hpp @@ -21,29 +21,29 @@ /* An empty seq is one that is just BOOST_PP_SEQ_NIL */ # # define BOOST_PP_SEQ_DETAIL_IS_EMPTY(seq) \ - BOOST_PP_COMPL \ - ( \ - BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq) \ - ) \ + BOOST_PP_COMPL \ + ( \ + BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq) \ + ) \ /**/ # # define BOOST_PP_SEQ_DETAIL_IS_EMPTY_SIZE(size) \ - BOOST_PP_COMPL \ - ( \ - BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(size) \ - ) \ + BOOST_PP_COMPL \ + ( \ + BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(size) \ + ) \ /**/ # # define BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq) \ - BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(BOOST_PP_SEQ_DETAIL_EMPTY_SIZE(seq)) \ + BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(BOOST_PP_SEQ_DETAIL_EMPTY_SIZE(seq)) \ /**/ # # define BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(size) \ - BOOST_PP_BOOL(size) \ + BOOST_PP_BOOL(size) \ /**/ # # define BOOST_PP_SEQ_DETAIL_EMPTY_SIZE(seq) \ - BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq (nil))) \ + BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq (nil))) \ /**/ # # endif diff --git a/include/boost/preprocessor/seq/for_each.hpp b/include/boost/preprocessor/seq/for_each.hpp index 3f9c0d7..00a83d4 100644 --- a/include/boost/preprocessor/seq/for_each.hpp +++ b/include/boost/preprocessor/seq/for_each.hpp @@ -36,13 +36,13 @@ # define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY(macro, data, seq) # # define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK(macro, data, seq) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \ - BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EXEC, \ - BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY \ - ) \ - (macro, data, seq) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \ + BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EXEC, \ + BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY \ + ) \ + (macro, data, seq) \ /**/ # # define BOOST_PP_SEQ_FOR_EACH_P(r, x) BOOST_PP_TUPLE_ELEM(4, 3, x) @@ -54,21 +54,21 @@ # endif # # define BOOST_PP_SEQ_FOR_EACH_O_I(macro, data, seq, sz) \ - BOOST_PP_SEQ_FOR_EACH_O_I_DEC(macro, data, seq, BOOST_PP_DEC(sz)) \ + BOOST_PP_SEQ_FOR_EACH_O_I_DEC(macro, data, seq, BOOST_PP_DEC(sz)) \ /**/ # define BOOST_PP_SEQ_FOR_EACH_O_I_DEC(macro, data, seq, sz) \ - ( \ - macro, \ - data, \ - BOOST_PP_IF \ - ( \ - sz, \ - BOOST_PP_SEQ_FOR_EACH_O_I_TAIL, \ - BOOST_PP_SEQ_FOR_EACH_O_I_NIL \ - ) \ - (seq), \ - sz \ - ) \ + ( \ + macro, \ + data, \ + BOOST_PP_IF \ + ( \ + sz, \ + BOOST_PP_SEQ_FOR_EACH_O_I_TAIL, \ + BOOST_PP_SEQ_FOR_EACH_O_I_NIL \ + ) \ + (seq), \ + sz \ + ) \ /**/ # define BOOST_PP_SEQ_FOR_EACH_O_I_TAIL(seq) BOOST_PP_SEQ_TAIL(seq) # define BOOST_PP_SEQ_FOR_EACH_O_I_NIL(seq) BOOST_PP_NIL @@ -95,13 +95,13 @@ # define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY_R(r, macro, data, seq) # # define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_R(r, macro, data, seq) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \ - BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EXEC_R, \ - BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY_R \ - ) \ - (r, macro, data, seq) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \ + BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EXEC_R, \ + BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY_R \ + ) \ + (r, macro, data, seq) \ /**/ # # endif diff --git a/include/boost/preprocessor/seq/for_each_i.hpp b/include/boost/preprocessor/seq/for_each_i.hpp index 81028d7..d29d4c1 100644 --- a/include/boost/preprocessor/seq/for_each_i.hpp +++ b/include/boost/preprocessor/seq/for_each_i.hpp @@ -37,13 +37,13 @@ # define BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EMPTY(macro, data, seq) # # define BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK(macro, data, seq) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \ - BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EXEC, \ - BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EMPTY \ - ) \ - (macro, data, seq) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \ + BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EXEC, \ + BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EMPTY \ + ) \ + (macro, data, seq) \ /**/ # # define BOOST_PP_SEQ_FOR_EACH_I_P(r, x) BOOST_PP_TUPLE_ELEM(5, 4, x) @@ -55,22 +55,22 @@ # endif # # define BOOST_PP_SEQ_FOR_EACH_I_O_I(macro, data, seq, i, sz) \ - BOOST_PP_SEQ_FOR_EACH_I_O_I_DEC(macro, data, seq, i, BOOST_PP_DEC(sz)) \ + BOOST_PP_SEQ_FOR_EACH_I_O_I_DEC(macro, data, seq, i, BOOST_PP_DEC(sz)) \ /**/ # define BOOST_PP_SEQ_FOR_EACH_I_O_I_DEC(macro, data, seq, i, sz) \ - ( \ - macro, \ - data, \ - BOOST_PP_IF \ - ( \ - sz, \ - BOOST_PP_SEQ_FOR_EACH_I_O_I_TAIL, \ - BOOST_PP_SEQ_FOR_EACH_I_O_I_NIL \ - ) \ - (seq), \ - BOOST_PP_INC(i), \ - sz \ - ) \ + ( \ + macro, \ + data, \ + BOOST_PP_IF \ + ( \ + sz, \ + BOOST_PP_SEQ_FOR_EACH_I_O_I_TAIL, \ + BOOST_PP_SEQ_FOR_EACH_I_O_I_NIL \ + ) \ + (seq), \ + BOOST_PP_INC(i), \ + sz \ + ) \ /**/ # define BOOST_PP_SEQ_FOR_EACH_I_O_I_TAIL(seq) BOOST_PP_SEQ_TAIL(seq) # define BOOST_PP_SEQ_FOR_EACH_I_O_I_NIL(seq) BOOST_PP_NIL @@ -97,13 +97,13 @@ # define BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EMPTY(r, macro, data, seq) # # define BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK(r, macro, data, seq) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \ - BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EXEC, \ - BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EMPTY \ - ) \ - (r, macro, data, seq) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \ + BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EXEC, \ + BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EMPTY \ + ) \ + (r, macro, data, seq) \ /**/ # # endif diff --git a/include/boost/preprocessor/seq/replace.hpp b/include/boost/preprocessor/seq/replace.hpp index 0cf6b77..f8b5c10 100644 --- a/include/boost/preprocessor/seq/replace.hpp +++ b/include/boost/preprocessor/seq/replace.hpp @@ -33,13 +33,13 @@ # define BOOST_PP_SEQ_REPLACE_DETAIL_REST_EMPTY(seq, i) # define BOOST_PP_SEQ_REPLACE_DETAIL_REST_VALID(seq, i) BOOST_PP_SEQ_REST_N(BOOST_PP_INC(i), seq) # define BOOST_PP_SEQ_REPLACE_DETAIL_REST(seq, i) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_EQUAL(i,BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq))), \ - BOOST_PP_SEQ_REPLACE_DETAIL_REST_EMPTY, \ - BOOST_PP_SEQ_REPLACE_DETAIL_REST_VALID \ - ) \ - (seq, i) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_EQUAL(i,BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq))), \ + BOOST_PP_SEQ_REPLACE_DETAIL_REST_EMPTY, \ + BOOST_PP_SEQ_REPLACE_DETAIL_REST_VALID \ + ) \ + (seq, i) \ /**/ # # endif diff --git a/include/boost/preprocessor/seq/rest_n.hpp b/include/boost/preprocessor/seq/rest_n.hpp index 4aefba4..cac52cf 100644 --- a/include/boost/preprocessor/seq/rest_n.hpp +++ b/include/boost/preprocessor/seq/rest_n.hpp @@ -32,15 +32,15 @@ # endif # # define BOOST_PP_SEQ_REST_N_DETAIL_EXEC(n, seq, size) \ - BOOST_PP_EXPR_IIF \ - ( \ - BOOST_PP_BITAND \ - ( \ - BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(size), \ - BOOST_PP_NOT_EQUAL(n,size) \ - ), \ - BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_SEQ_SPLIT(BOOST_PP_INC(n), BOOST_PP_IDENTITY( (nil) seq )))() \ - ) \ + BOOST_PP_EXPR_IIF \ + ( \ + BOOST_PP_BITAND \ + ( \ + BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(size), \ + BOOST_PP_NOT_EQUAL(n,size) \ + ), \ + BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_SEQ_SPLIT(BOOST_PP_INC(n), BOOST_PP_IDENTITY( (nil) seq )))() \ + ) \ /**/ # # endif diff --git a/include/boost/preprocessor/tuple/detail/is_single_return.hpp b/include/boost/preprocessor/tuple/detail/is_single_return.hpp index 02a4fb2..bcdb544 100644 --- a/include/boost/preprocessor/tuple/detail/is_single_return.hpp +++ b/include/boost/preprocessor/tuple/detail/is_single_return.hpp @@ -20,9 +20,9 @@ # include # include # include -# define BOOST_PP_TUPLE_IS_SINGLE_RETURN(sr,nsr,tuple) \ - BOOST_PP_IIF(BOOST_PP_IS_1(BOOST_PP_TUPLE_SIZE(tuple)),sr,nsr) \ - /**/ +# define BOOST_PP_TUPLE_IS_SINGLE_RETURN(sr,nsr,tuple) \ + BOOST_PP_IIF(BOOST_PP_IS_1(BOOST_PP_TUPLE_SIZE(tuple)),sr,nsr) \ + /**/ # endif /* BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC */ # # endif /* BOOST_PREPROCESSOR_TUPLE_DETAIL_IS_SINGLE_RETURN_HPP */ diff --git a/include/boost/preprocessor/tuple/elem.hpp b/include/boost/preprocessor/tuple/elem.hpp index 88044d3..148e6bd 100644 --- a/include/boost/preprocessor/tuple/elem.hpp +++ b/include/boost/preprocessor/tuple/elem.hpp @@ -33,12 +33,12 @@ else use BOOST_PP_REM. This fixes a VC++ problem with an empty tuple and BOOST_PP_TUPLE_ELEM functionality. See tuple_elem_bug_test.cxx. */ -# define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) \ - BOOST_PP_VARIADIC_ELEM(n, BOOST_PP_EXPAND(BOOST_PP_TUPLE_IS_SINGLE_RETURN(BOOST_PP_REM_CAT,BOOST_PP_REM,tuple) tuple)) \ - /**/ +# define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) \ + BOOST_PP_VARIADIC_ELEM(n, BOOST_PP_EXPAND(BOOST_PP_TUPLE_IS_SINGLE_RETURN(BOOST_PP_REM_CAT,BOOST_PP_REM,tuple) tuple)) \ + /**/ # else # define BOOST_PP_TUPLE_ELEM(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_ELEM_O_, __VA_ARGS__)(__VA_ARGS__) -# define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) BOOST_PP_VARIADIC_ELEM(n, BOOST_PP_REM tuple) +# define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) BOOST_PP_VARIADIC_ELEM(n, BOOST_PP_REM tuple) # endif # define BOOST_PP_TUPLE_ELEM_O_3(size, n, tuple) BOOST_PP_TUPLE_ELEM_O_2(n, tuple) # else diff --git a/include/boost/preprocessor/tuple/insert.hpp b/include/boost/preprocessor/tuple/insert.hpp index ce4544f..56911b1 100644 --- a/include/boost/preprocessor/tuple/insert.hpp +++ b/include/boost/preprocessor/tuple/insert.hpp @@ -23,13 +23,13 @@ # /* BOOST_PP_TUPLE_INSERT */ # # define BOOST_PP_TUPLE_INSERT(tuple, i, elem) \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_INSERT(BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_INSERT(BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \ /**/ # # /* BOOST_PP_TUPLE_INSERT_D */ # # define BOOST_PP_TUPLE_INSERT_D(d, tuple, i, elem) \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_INSERT_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_INSERT_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \ /**/ # # endif // BOOST_PP_VARIADICS diff --git a/include/boost/preprocessor/tuple/pop_back.hpp b/include/boost/preprocessor/tuple/pop_back.hpp index 3ac414b..1aa91c1 100644 --- a/include/boost/preprocessor/tuple/pop_back.hpp +++ b/include/boost/preprocessor/tuple/pop_back.hpp @@ -26,17 +26,17 @@ # /* BOOST_PP_TUPLE_POP_BACK */ # # define BOOST_PP_TUPLE_POP_BACK(tuple) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ - BOOST_PP_TUPLE_POP_BACK_EXEC, \ - BOOST_PP_TUPLE_POP_BACK_RETURN \ - ) \ - (tuple) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ + BOOST_PP_TUPLE_POP_BACK_EXEC, \ + BOOST_PP_TUPLE_POP_BACK_RETURN \ + ) \ + (tuple) \ /**/ # # define BOOST_PP_TUPLE_POP_BACK_EXEC(tuple) \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK(BOOST_PP_TUPLE_TO_ARRAY(tuple))) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK(BOOST_PP_TUPLE_TO_ARRAY(tuple))) \ /**/ # # define BOOST_PP_TUPLE_POP_BACK_RETURN(tuple) tuple @@ -44,17 +44,17 @@ # /* BOOST_PP_TUPLE_POP_BACK_Z */ # # define BOOST_PP_TUPLE_POP_BACK_Z(z, tuple) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ - BOOST_PP_TUPLE_POP_BACK_Z_EXEC, \ - BOOST_PP_TUPLE_POP_BACK_Z_RETURN \ - ) \ - (z, tuple) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ + BOOST_PP_TUPLE_POP_BACK_Z_EXEC, \ + BOOST_PP_TUPLE_POP_BACK_Z_RETURN \ + ) \ + (z, tuple) \ /**/ # # define BOOST_PP_TUPLE_POP_BACK_Z_EXEC(z, tuple) \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK_Z(z, BOOST_PP_TUPLE_TO_ARRAY(tuple))) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK_Z(z, BOOST_PP_TUPLE_TO_ARRAY(tuple))) \ /**/ # # define BOOST_PP_TUPLE_POP_BACK_Z_RETURN(z, tuple) tuple diff --git a/include/boost/preprocessor/tuple/pop_front.hpp b/include/boost/preprocessor/tuple/pop_front.hpp index fafaa77..53b50ad 100644 --- a/include/boost/preprocessor/tuple/pop_front.hpp +++ b/include/boost/preprocessor/tuple/pop_front.hpp @@ -27,17 +27,17 @@ # /* BOOST_PP_TUPLE_POP_FRONT */ # # define BOOST_PP_TUPLE_POP_FRONT(tuple) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ - BOOST_PP_TUPLE_POP_FRONT_EXEC, \ - BOOST_PP_TUPLE_POP_FRONT_RETURN \ - ) \ - (tuple) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ + BOOST_PP_TUPLE_POP_FRONT_EXEC, \ + BOOST_PP_TUPLE_POP_FRONT_RETURN \ + ) \ + (tuple) \ /**/ # # define BOOST_PP_TUPLE_POP_FRONT_EXEC(tuple) \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_FRONT(BOOST_PP_TUPLE_TO_ARRAY(tuple))) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_FRONT(BOOST_PP_TUPLE_TO_ARRAY(tuple))) \ /**/ # # define BOOST_PP_TUPLE_POP_FRONT_RETURN(tuple) tuple @@ -45,17 +45,17 @@ # /* BOOST_PP_TUPLE_POP_FRONT_Z */ # # define BOOST_PP_TUPLE_POP_FRONT_Z(z, tuple) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ - BOOST_PP_TUPLE_POP_FRONT_Z_EXEC, \ - BOOST_PP_TUPLE_POP_FRONT_Z_RETURN \ - ) \ - (z, tuple) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ + BOOST_PP_TUPLE_POP_FRONT_Z_EXEC, \ + BOOST_PP_TUPLE_POP_FRONT_Z_RETURN \ + ) \ + (z, tuple) \ /**/ # # define BOOST_PP_TUPLE_POP_FRONT_Z_EXEC(z, tuple) \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_FRONT_Z(z, BOOST_PP_TUPLE_TO_ARRAY(tuple))) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_FRONT_Z(z, BOOST_PP_TUPLE_TO_ARRAY(tuple))) \ /**/ # # define BOOST_PP_TUPLE_POP_FRONT_Z_RETURN(z, tuple) tuple diff --git a/include/boost/preprocessor/tuple/push_back.hpp b/include/boost/preprocessor/tuple/push_back.hpp index 2ae8f63..482d265 100644 --- a/include/boost/preprocessor/tuple/push_back.hpp +++ b/include/boost/preprocessor/tuple/push_back.hpp @@ -23,7 +23,7 @@ # /* BOOST_PP_TUPLE_PUSH_BACK */ # # define BOOST_PP_TUPLE_PUSH_BACK(tuple, elem) \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_PUSH_BACK(BOOST_PP_TUPLE_TO_ARRAY(tuple), elem)) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_PUSH_BACK(BOOST_PP_TUPLE_TO_ARRAY(tuple), elem)) \ /**/ # # endif // BOOST_PP_VARIADICS diff --git a/include/boost/preprocessor/tuple/push_front.hpp b/include/boost/preprocessor/tuple/push_front.hpp index 81fea85..8bbfa79 100644 --- a/include/boost/preprocessor/tuple/push_front.hpp +++ b/include/boost/preprocessor/tuple/push_front.hpp @@ -24,7 +24,7 @@ # /* BOOST_PP_TUPLE_PUSH_FRONT */ # # define BOOST_PP_TUPLE_PUSH_FRONT(tuple, elem) \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_PUSH_FRONT(BOOST_PP_TUPLE_TO_ARRAY(tuple), elem)) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_PUSH_FRONT(BOOST_PP_TUPLE_TO_ARRAY(tuple), elem)) \ /**/ # # endif // BOOST_PP_VARIADICS diff --git a/include/boost/preprocessor/tuple/rem.hpp b/include/boost/preprocessor/tuple/rem.hpp index c934447..e99008d 100644 --- a/include/boost/preprocessor/tuple/rem.hpp +++ b/include/boost/preprocessor/tuple/rem.hpp @@ -22,10 +22,10 @@ # /* BOOST_PP_REM */ # # if BOOST_PP_VARIADICS -# if BOOST_PP_VARIADICS_MSVC - /* To be used internally when __VA_ARGS__ could be empty ( or is a single element ) */ -# define BOOST_PP_REM_CAT(...) BOOST_PP_CAT(__VA_ARGS__,) -# endif +# if BOOST_PP_VARIADICS_MSVC + /* To be used internally when __VA_ARGS__ could be empty ( or is a single element ) */ +# define BOOST_PP_REM_CAT(...) BOOST_PP_CAT(__VA_ARGS__,) +# endif # define BOOST_PP_REM(...) __VA_ARGS__ # else # define BOOST_PP_REM(x) x @@ -37,10 +37,10 @@ VC++8.0 cannot handle the variadic version of BOOST_PP_TUPLE_REM(size) */ # if BOOST_PP_VARIADICS && !(BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400) -# if BOOST_PP_VARIADICS_MSVC - /* To be used internally when the size could be 0 ( or 1 ) */ -# define BOOST_PP_TUPLE_REM_CAT(size) BOOST_PP_REM_CAT -# endif +# if BOOST_PP_VARIADICS_MSVC + /* To be used internally when the size could be 0 ( or 1 ) */ +# define BOOST_PP_TUPLE_REM_CAT(size) BOOST_PP_REM_CAT +# endif # define BOOST_PP_TUPLE_REM(size) BOOST_PP_REM # else # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() @@ -124,10 +124,10 @@ # define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__), (__VA_ARGS__)) # define BOOST_PP_TUPLE_REM_CTOR_I(m, args) BOOST_PP_TUPLE_REM_CTOR_II(m, args) # define BOOST_PP_TUPLE_REM_CTOR_II(m, args) BOOST_PP_CAT(m ## args,) -# define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_EXPAND(BOOST_PP_TUPLE_IS_SINGLE_RETURN(BOOST_PP_REM_CAT,BOOST_PP_REM,tuple) tuple) +# define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_EXPAND(BOOST_PP_TUPLE_IS_SINGLE_RETURN(BOOST_PP_REM_CAT,BOOST_PP_REM,tuple) tuple) # else # define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__)(__VA_ARGS__) -# define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_REM tuple +# define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_REM tuple # endif # define BOOST_PP_TUPLE_REM_CTOR_O_2(size, tuple) BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) # else diff --git a/include/boost/preprocessor/tuple/remove.hpp b/include/boost/preprocessor/tuple/remove.hpp index 25fa376..5aefa57 100644 --- a/include/boost/preprocessor/tuple/remove.hpp +++ b/include/boost/preprocessor/tuple/remove.hpp @@ -26,17 +26,17 @@ # /* BOOST_PP_TUPLE_REMOVE */ # # define BOOST_PP_TUPLE_REMOVE(tuple, i) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ - BOOST_PP_TUPLE_REMOVE_EXEC, \ - BOOST_PP_TUPLE_REMOVE_RETURN \ - ) \ - (tuple, i) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_GREATER(BOOST_PP_TUPLE_SIZE(tuple),1), \ + BOOST_PP_TUPLE_REMOVE_EXEC, \ + BOOST_PP_TUPLE_REMOVE_RETURN \ + ) \ + (tuple, i) \ /**/ # # define BOOST_PP_TUPLE_REMOVE_EXEC(tuple, i) \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REMOVE(BOOST_PP_TUPLE_TO_ARRAY(tuple), i)) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REMOVE(BOOST_PP_TUPLE_TO_ARRAY(tuple), i)) \ /**/ # # define BOOST_PP_TUPLE_REMOVE_RETURN(tuple, i) tuple @@ -44,17 +44,17 @@ # /* BOOST_PP_TUPLE_REMOVE_D */ # # define BOOST_PP_TUPLE_REMOVE_D(d, tuple, i) \ - BOOST_PP_IIF \ - ( \ - BOOST_PP_GREATER_D(d, BOOST_PP_TUPLE_SIZE(tuple), 1), \ - BOOST_PP_TUPLE_REMOVE_D_EXEC, \ - BOOST_PP_TUPLE_REMOVE_D_RETURN \ - ) \ - (d, tuple, i) \ + BOOST_PP_IIF \ + ( \ + BOOST_PP_GREATER_D(d, BOOST_PP_TUPLE_SIZE(tuple), 1), \ + BOOST_PP_TUPLE_REMOVE_D_EXEC, \ + BOOST_PP_TUPLE_REMOVE_D_RETURN \ + ) \ + (d, tuple, i) \ /**/ # # define BOOST_PP_TUPLE_REMOVE_D_EXEC(d, tuple, i) \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REMOVE_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i)) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REMOVE_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i)) \ /**/ # # define BOOST_PP_TUPLE_REMOVE_D_RETURN(d, tuple, i) tuple diff --git a/include/boost/preprocessor/tuple/replace.hpp b/include/boost/preprocessor/tuple/replace.hpp index 320ef9e..80f65b5 100644 --- a/include/boost/preprocessor/tuple/replace.hpp +++ b/include/boost/preprocessor/tuple/replace.hpp @@ -23,13 +23,13 @@ # /* BOOST_PP_TUPLE_REPLACE */ # # define BOOST_PP_TUPLE_REPLACE(tuple, i, elem) \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REPLACE(BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REPLACE(BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \ /**/ # # /* BOOST_PP_TUPLE_REPLACE_D */ # # define BOOST_PP_TUPLE_REPLACE_D(d, tuple, i, elem) \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REPLACE_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_REPLACE_D(d, BOOST_PP_TUPLE_TO_ARRAY(tuple), i, elem)) \ /**/ # # endif // BOOST_PP_VARIADICS diff --git a/include/boost/preprocessor/tuple/reverse.hpp b/include/boost/preprocessor/tuple/reverse.hpp index 489c442..26a52d9 100644 --- a/include/boost/preprocessor/tuple/reverse.hpp +++ b/include/boost/preprocessor/tuple/reverse.hpp @@ -28,10 +28,10 @@ # define BOOST_PP_TUPLE_REVERSE(...) BOOST_PP_TUPLE_REVERSE_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REVERSE_O_, __VA_ARGS__), (__VA_ARGS__)) # define BOOST_PP_TUPLE_REVERSE_I(m, args) BOOST_PP_TUPLE_REVERSE_II(m, args) # define BOOST_PP_TUPLE_REVERSE_II(m, args) BOOST_PP_CAT(m ## args,) -# define BOOST_PP_TUPLE_REVERSE_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_REVERSE_, BOOST_PP_TUPLE_SIZE(tuple)) tuple +# define BOOST_PP_TUPLE_REVERSE_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_REVERSE_, BOOST_PP_TUPLE_SIZE(tuple)) tuple # else # define BOOST_PP_TUPLE_REVERSE(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REVERSE_O_, __VA_ARGS__)(__VA_ARGS__) -# define BOOST_PP_TUPLE_REVERSE_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_REVERSE_, BOOST_PP_VARIADIC_SIZE tuple) tuple +# define BOOST_PP_TUPLE_REVERSE_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_REVERSE_, BOOST_PP_VARIADIC_SIZE tuple) tuple # endif # define BOOST_PP_TUPLE_REVERSE_O_2(size, tuple) BOOST_PP_TUPLE_REVERSE_O_1(tuple) # else diff --git a/include/boost/preprocessor/tuple/to_list.hpp b/include/boost/preprocessor/tuple/to_list.hpp index da7828f..25d9b09 100644 --- a/include/boost/preprocessor/tuple/to_list.hpp +++ b/include/boost/preprocessor/tuple/to_list.hpp @@ -28,10 +28,10 @@ # define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_TUPLE_TO_LIST_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__), (__VA_ARGS__)) # define BOOST_PP_TUPLE_TO_LIST_I(m, args) BOOST_PP_TUPLE_TO_LIST_II(m, args) # define BOOST_PP_TUPLE_TO_LIST_II(m, args) BOOST_PP_CAT(m ## args,) -# define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_TUPLE_SIZE(tuple)) tuple +# define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_TUPLE_SIZE(tuple)) tuple # else # define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__)(__VA_ARGS__) -# define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_VARIADIC_SIZE tuple) tuple +# define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_VARIADIC_SIZE tuple) tuple # endif # define BOOST_PP_TUPLE_TO_LIST_O_2(size, tuple) BOOST_PP_TUPLE_TO_LIST_O_1(tuple) # else diff --git a/include/boost/preprocessor/tuple/to_seq.hpp b/include/boost/preprocessor/tuple/to_seq.hpp index a53f5a0..028ee42 100644 --- a/include/boost/preprocessor/tuple/to_seq.hpp +++ b/include/boost/preprocessor/tuple/to_seq.hpp @@ -26,10 +26,10 @@ # define BOOST_PP_TUPLE_TO_SEQ(...) BOOST_PP_TUPLE_TO_SEQ_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_SEQ_O_, __VA_ARGS__), (__VA_ARGS__)) # define BOOST_PP_TUPLE_TO_SEQ_I(m, args) BOOST_PP_TUPLE_TO_SEQ_II(m, args) # define BOOST_PP_TUPLE_TO_SEQ_II(m, args) BOOST_PP_CAT(m ## args,) -# define BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_SEQ_, BOOST_PP_TUPLE_SIZE(tuple)) tuple +# define BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_SEQ_, BOOST_PP_TUPLE_SIZE(tuple)) tuple # else # define BOOST_PP_TUPLE_TO_SEQ(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_SEQ_O_, __VA_ARGS__)(__VA_ARGS__) -# define BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_SEQ_, BOOST_PP_VARIADIC_SIZE tuple) tuple +# define BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_SEQ_, BOOST_PP_VARIADIC_SIZE tuple) tuple # endif # define BOOST_PP_TUPLE_TO_SEQ_O_2(size, tuple) BOOST_PP_TUPLE_TO_SEQ_O_1(tuple) # else diff --git a/include/boost/preprocessor/variadic/detail/is_single_return.hpp b/include/boost/preprocessor/variadic/detail/is_single_return.hpp index 5c95029..ae8cb4d 100644 --- a/include/boost/preprocessor/variadic/detail/is_single_return.hpp +++ b/include/boost/preprocessor/variadic/detail/is_single_return.hpp @@ -20,9 +20,9 @@ # include # include # include -# define BOOST_PP_VARIADIC_IS_SINGLE_RETURN(sr,nsr,...) \ - BOOST_PP_IIF(BOOST_PP_IS_1(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)),sr,nsr) \ - /**/ +# define BOOST_PP_VARIADIC_IS_SINGLE_RETURN(sr,nsr,...) \ + BOOST_PP_IIF(BOOST_PP_IS_1(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)),sr,nsr) \ + /**/ # endif /* BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC */ # # endif /* BOOST_PREPROCESSOR_VARIADIC_DETAIL_IS_SINGLE_RETURN_HPP */ diff --git a/test/config_info.cpp b/test/config_info.cpp index ce92887..cd80ba2 100644 --- a/test/config_info.cpp +++ b/test/config_info.cpp @@ -1,3 +1,14 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2014. +# * 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) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# #include #include #include diff --git a/test/seq.cxx b/test/seq.cxx index 0ff7e66..88b2208 100644 --- a/test/seq.cxx +++ b/test/seq.cxx @@ -35,46 +35,46 @@ # define SEQ (4)(1)(5)(2) # define SEQ_100 \ - (1)(2)(3)(4)(5)(6)(7)(8)(9) \ - (10)(11)(12)(13)(14)(15)(16)(17)(18)(19) \ - (20)(21)(22)(23)(24)(25)(26)(27)(28)(29) \ - (30)(31)(32)(33)(34)(35)(36)(37)(38)(39) \ - (40)(41)(42)(43)(44)(45)(46)(47)(48)(49) \ - (50)(51)(52)(53)(54)(55)(56)(57)(58)(59) \ - (60)(61)(62)(63)(64)(65)(66)(67)(68)(69) \ - (70)(71)(72)(73)(74)(75)(76)(77)(78)(79) \ - (80)(81)(82)(83)(84)(85)(86)(87)(88)(89) \ - (90)(91)(92)(93)(94)(95)(96)(97)(98)(99) \ - (100) - + (1)(2)(3)(4)(5)(6)(7)(8)(9) \ + (10)(11)(12)(13)(14)(15)(16)(17)(18)(19) \ + (20)(21)(22)(23)(24)(25)(26)(27)(28)(29) \ + (30)(31)(32)(33)(34)(35)(36)(37)(38)(39) \ + (40)(41)(42)(43)(44)(45)(46)(47)(48)(49) \ + (50)(51)(52)(53)(54)(55)(56)(57)(58)(59) \ + (60)(61)(62)(63)(64)(65)(66)(67)(68)(69) \ + (70)(71)(72)(73)(74)(75)(76)(77)(78)(79) \ + (80)(81)(82)(83)(84)(85)(86)(87)(88)(89) \ + (90)(91)(92)(93)(94)(95)(96)(97)(98)(99) \ + (100) + # define SEQ_255 \ - (1)(2)(3)(4)(5)(6)(7)(8)(9) \ - (10)(11)(12)(13)(14)(15)(16)(17)(18)(19) \ - (20)(21)(22)(23)(24)(25)(26)(27)(28)(29) \ - (30)(31)(32)(33)(34)(35)(36)(37)(38)(39) \ - (40)(41)(42)(43)(44)(45)(46)(47)(48)(49) \ - (50)(51)(52)(53)(54)(55)(56)(57)(58)(59) \ - (60)(61)(62)(63)(64)(65)(66)(67)(68)(69) \ - (70)(71)(72)(73)(74)(75)(76)(77)(78)(79) \ - (80)(81)(82)(83)(84)(85)(86)(87)(88)(89) \ - (90)(91)(92)(93)(94)(95)(96)(97)(98)(99) \ - (100)(101)(102)(103)(104)(105)(106)(107)(108)(109) \ - (110)(111)(112)(113)(114)(115)(116)(117)(118)(119) \ - (120)(121)(122)(123)(124)(125)(126)(127)(128)(129) \ - (130)(131)(132)(133)(134)(135)(136)(137)(138)(139) \ - (140)(141)(142)(143)(144)(145)(146)(147)(148)(149) \ - (150)(151)(152)(153)(154)(155)(156)(157)(158)(159) \ - (160)(161)(162)(163)(164)(165)(166)(167)(168)(169) \ - (170)(171)(172)(173)(174)(175)(176)(177)(178)(179) \ - (180)(181)(182)(183)(184)(185)(186)(187)(188)(189) \ - (190)(191)(192)(193)(194)(195)(196)(197)(198)(199) \ - (200)(201)(202)(203)(204)(205)(206)(207)(208)(209) \ - (210)(211)(212)(213)(214)(215)(216)(217)(218)(219) \ - (220)(221)(222)(223)(224)(225)(226)(227)(228)(229) \ - (230)(231)(232)(233)(234)(235)(236)(237)(238)(239) \ - (240)(241)(242)(243)(244)(245)(246)(247)(248)(249) \ - (250)(251)(252)(253)(254)(255) - + (1)(2)(3)(4)(5)(6)(7)(8)(9) \ + (10)(11)(12)(13)(14)(15)(16)(17)(18)(19) \ + (20)(21)(22)(23)(24)(25)(26)(27)(28)(29) \ + (30)(31)(32)(33)(34)(35)(36)(37)(38)(39) \ + (40)(41)(42)(43)(44)(45)(46)(47)(48)(49) \ + (50)(51)(52)(53)(54)(55)(56)(57)(58)(59) \ + (60)(61)(62)(63)(64)(65)(66)(67)(68)(69) \ + (70)(71)(72)(73)(74)(75)(76)(77)(78)(79) \ + (80)(81)(82)(83)(84)(85)(86)(87)(88)(89) \ + (90)(91)(92)(93)(94)(95)(96)(97)(98)(99) \ + (100)(101)(102)(103)(104)(105)(106)(107)(108)(109) \ + (110)(111)(112)(113)(114)(115)(116)(117)(118)(119) \ + (120)(121)(122)(123)(124)(125)(126)(127)(128)(129) \ + (130)(131)(132)(133)(134)(135)(136)(137)(138)(139) \ + (140)(141)(142)(143)(144)(145)(146)(147)(148)(149) \ + (150)(151)(152)(153)(154)(155)(156)(157)(158)(159) \ + (160)(161)(162)(163)(164)(165)(166)(167)(168)(169) \ + (170)(171)(172)(173)(174)(175)(176)(177)(178)(179) \ + (180)(181)(182)(183)(184)(185)(186)(187)(188)(189) \ + (190)(191)(192)(193)(194)(195)(196)(197)(198)(199) \ + (200)(201)(202)(203)(204)(205)(206)(207)(208)(209) \ + (210)(211)(212)(213)(214)(215)(216)(217)(218)(219) \ + (220)(221)(222)(223)(224)(225)(226)(227)(228)(229) \ + (230)(231)(232)(233)(234)(235)(236)(237)(238)(239) \ + (240)(241)(242)(243)(244)(245)(246)(247)(248)(249) \ + (250)(251)(252)(253)(254)(255) + # define SEQ_256 SEQ_255(256) # define SEQVAR (4,5,8,3,61)(1,0)(5,22,43)(2)(17,45,33) diff --git a/test/tuple_elem_bug_test.cxx b/test/tuple_elem_bug_test.cxx index 56e36a6..c365609 100644 --- a/test/tuple_elem_bug_test.cxx +++ b/test/tuple_elem_bug_test.cxx @@ -17,21 +17,21 @@ #define TN_GEN_ONE(p) (1) #define TN_GEN_ZERO(p) (0) #define TN_TEST_ONE_MORE(parameter,ens) \ - BOOST_PP_IF \ - ( \ - BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(1,0,ens),0), \ - TN_GEN_ONE, \ - TN_GEN_ZERO \ - ) \ - (parameter) \ + BOOST_PP_IF \ + ( \ + BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(1,0,ens),0), \ + TN_GEN_ONE, \ + TN_GEN_ZERO \ + ) \ + (parameter) \ /**/ #define TN_TEST_ONE(parameter,ens) \ - BOOST_PP_TUPLE_ELEM \ - ( \ - 1, \ - 0, \ - TN_TEST_ONE_MORE(parameter,ens) \ - ) \ + BOOST_PP_TUPLE_ELEM \ + ( \ + 1, \ + 0, \ + TN_TEST_ONE_MORE(parameter,ens) \ + ) \ /**/ BEGIN TN_TEST_ONE(A,(1)) == 1 END From c436de6142477dd2c432e0836004c2503ef3b0f1 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Sat, 14 Sep 2019 10:27:14 -0400 Subject: [PATCH 03/14] Adjusted the configuration so that compiling a cuda source file ( .cu ) using clang does not set BOOST_PP_VARIADICS to 0. An 'explicit' test was also added for this situation. --- include/boost/preprocessor/config/config.hpp | 2 +- test/Jamfile.v2 | 10 +++++++ test/clang_cuda.cu | 29 ++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 test/clang_cuda.cu diff --git a/include/boost/preprocessor/config/config.hpp b/include/boost/preprocessor/config/config.hpp index 2c1e72f..7abaaf0 100644 --- a/include/boost/preprocessor/config/config.hpp +++ b/include/boost/preprocessor/config/config.hpp @@ -80,7 +80,7 @@ # if !defined BOOST_PP_VARIADICS # /* variadic support explicitly disabled for all untested compilers */ -# if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || ( defined __SUNPRO_CC && __SUNPRO_CC < 0x5120 ) || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || (defined(__PGI) && !defined(__EDG__)) +# if defined __GCCXML__ || (defined __CUDACC__ && !(defined(__clang__) && defined(__CUDA__))) || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || ( defined __SUNPRO_CC && __SUNPRO_CC < 0x5120 ) || (defined __HP_aCC && !defined __EDG__) || defined __MRC__ || defined __SC__ || (defined(__PGI) && !defined(__EDG__)) # define BOOST_PP_VARIADICS 0 # elif defined(_MSC_VER) && defined(__clang__) # define BOOST_PP_VARIADICS 1 diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index e12d73a..38ebc88 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -247,3 +247,13 @@ alias preprocessor_config : [ run config_info.cpp ] ; + +alias clang_cuda + : + [ compile clang_cuda.cu + : --cuda-gpu-arch=sm_20 + : clang_cuda_cu + ] + ; + +explicit clang_cuda ; diff --git a/test/clang_cuda.cu b/test/clang_cuda.cu new file mode 100644 index 0000000..e2fd6d1 --- /dev/null +++ b/test/clang_cuda.cu @@ -0,0 +1,29 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2019. +# * 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) +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# include +# +# define BEGIN typedef int BOOST_PP_CAT(test_, __LINE__)[(( +# define END )==1) ? 1 : -1]; + +#if defined(__clang__) && defined(__CUDACC__) && defined(__CUDA__) + +BEGIN BOOST_PP_VARIADICS == 1 END + +#else + +BEGIN 0 == 1 END + +#endif + +int main(void) { + return 0; +} From e476f10f529e100e0a99844723c6d1b1fbc89824 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Wed, 25 Sep 2019 06:29:04 -0400 Subject: [PATCH 04/14] Added OPT macro to determine whether C++20's __VA_OPT__ is supported or not. Updated the undocumented variadic IS_EMPTY to use the functionality of __VA_OPT__ if it exists to provide perfect functionality for testing for emptiness. --- .../facilities/is_empty_variadic.hpp | 15 +++++++++ .../preprocessor/variadic/detail/opt.hpp | 30 +++++++++++++++++ include/boost/preprocessor/variadic/opt.hpp | 28 ++++++++++++++++ test/clang_cuda.cu | 5 +-- test/config_info.cpp | 3 ++ test/isempty.cxx | 15 ++++++++- test/isempty_variadic_standard_failure.cxx | 10 ++++++ test/isempty_variadic_standard_failure2.cxx | 10 ++++++ test/test.h | 21 ++---------- test/test_macro.h | 22 +++++++++++++ test/test_main.h | 32 +++++++++++++++++++ 11 files changed, 167 insertions(+), 24 deletions(-) create mode 100644 include/boost/preprocessor/variadic/detail/opt.hpp create mode 100644 include/boost/preprocessor/variadic/opt.hpp create mode 100644 test/test_macro.h create mode 100644 test/test_main.h diff --git a/include/boost/preprocessor/facilities/is_empty_variadic.hpp b/include/boost/preprocessor/facilities/is_empty_variadic.hpp index eee4062..403e74b 100644 --- a/include/boost/preprocessor/facilities/is_empty_variadic.hpp +++ b/include/boost/preprocessor/facilities/is_empty_variadic.hpp @@ -16,6 +16,20 @@ # # if BOOST_PP_VARIADICS # +# include +# +# if BOOST_PP_VARIADIC_OPT() +# +#define BOOST_PP_IS_EMPTY_FUNCTION2(...) \ + __VA_OPT__(0,) 1 \ +/**/ +#define BOOST_PP_IS_EMPTY_FUNCTION(...) \ + BOOST_PP_IS_EMPTY_FUNCTION2(__VA_ARGS__) \ +/**/ +#define BOOST_PP_IS_EMPTY(...) \ + BOOST_PP_VARIADIC_OPT_ELEM0(BOOST_PP_IS_EMPTY_FUNCTION(__VA_ARGS__),) \ +/**/ +# else # include # include # @@ -53,5 +67,6 @@ /**/ #define BOOST_PP_IS_EMPTY_ZERO(...) 0 # endif /* BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400 */ +# endif /* BOOST_PP_VARIADIC_OPT() */ # endif /* BOOST_PP_VARIADICS */ # endif /* BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_VARIADIC_HPP */ diff --git a/include/boost/preprocessor/variadic/detail/opt.hpp b/include/boost/preprocessor/variadic/detail/opt.hpp new file mode 100644 index 0000000..3b50850 --- /dev/null +++ b/include/boost/preprocessor/variadic/detail/opt.hpp @@ -0,0 +1,30 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2019. * +# * 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) * +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_VARIADIC_DETAIL_OPT_HPP +# define BOOST_PREPROCESSOR_VARIADIC_DETAIL_OPT_HPP +# +# include +# +# if BOOST_PP_VARIADICS && defined(__cplusplus) && __cplusplus > 201703L +# +# define BOOST_PP_VARIADIC_OPT_FUNCTION(...) \ + __VA_OPT__(0,) 0, 0, 1 \ +/**/ +# +# define BOOST_PP_VARIADIC_OPT_ELEM0(e0, ...) BOOST_PP_VARIADIC_OPT_ELEM_0(e0,__VA_ARGS__) +# define BOOST_PP_VARIADIC_OPT_ELEM2(e0, ...) BOOST_PP_VARIADIC_OPT_ELEM_2(e0,__VA_ARGS__) +# define BOOST_PP_VARIADIC_OPT_ELEM_0(e0, ...) e0 +# define BOOST_PP_VARIADIC_OPT_ELEM_2(e0, e1, e2, ...) e2 +# +# endif +# +# endif diff --git a/include/boost/preprocessor/variadic/opt.hpp b/include/boost/preprocessor/variadic/opt.hpp new file mode 100644 index 0000000..c26b0d8 --- /dev/null +++ b/include/boost/preprocessor/variadic/opt.hpp @@ -0,0 +1,28 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2019. * +# * 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) * +# * * +# ************************************************************************** */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_PREPROCESSOR_VARIADIC_OPT_HPP +# define BOOST_PREPROCESSOR_VARIADIC_OPT_HPP +# +# include +# +# /* BOOST_PP_VARIADIC_OPT */ +# +# if BOOST_PP_VARIADICS && defined(__cplusplus) && __cplusplus > 201703L +# include +# define BOOST_PP_VARIADIC_OPT() \ + BOOST_PP_VARIADIC_OPT_ELEM2(BOOST_PP_VARIADIC_OPT_FUNCTION(),) \ +/**/ +# else +# define BOOST_PP_VARIADIC_OPT() 0 +# endif +# +# endif diff --git a/test/clang_cuda.cu b/test/clang_cuda.cu index e2fd6d1..e13d656 100644 --- a/test/clang_cuda.cu +++ b/test/clang_cuda.cu @@ -9,10 +9,7 @@ # # /* See http://www.boost.org for most recent version. */ # -# include -# -# define BEGIN typedef int BOOST_PP_CAT(test_, __LINE__)[(( -# define END )==1) ? 1 : -1]; +# include #if defined(__clang__) && defined(__CUDACC__) && defined(__CUDA__) diff --git a/test/config_info.cpp b/test/config_info.cpp index cd80ba2..f800aa7 100644 --- a/test/config_info.cpp +++ b/test/config_info.cpp @@ -13,6 +13,7 @@ #include #include #include +#include static unsigned int indent = 4; static unsigned int width = 40; @@ -93,6 +94,8 @@ void print_macros() PRINT_MACRO(BOOST_PP_CONFIG_FLAGS()); PRINT_MACRO(BOOST_PP_VARIADICS); PRINT_MACRO(BOOST_PP_VARIADICS_MSVC); + PRINT_MACRO(BOOST_PP_VARIADICS_MSVC); + PRINT_MACRO(BOOST_PP_VARIADIC_OPT()); } int main() diff --git a/test/isempty.cxx b/test/isempty.cxx index 56bc81b..5fc8838 100644 --- a/test/isempty.cxx +++ b/test/isempty.cxx @@ -38,7 +38,20 @@ #if BOOST_PP_VARIADICS -#if BOOST_PP_VARIADICS_MSVC /* Testing the VC++ variadic version */ +# include + +#if defined(__cplusplus) && __cplusplus > 201703L && BOOST_PP_VARIADIC_OPT() + +BEGIN BOOST_PP_IS_EMPTY(FUNC_GEN) == 0 END +BEGIN BOOST_PP_IS_EMPTY(FUNC_GEN2) == 0 END +BEGIN BOOST_PP_IS_EMPTY(FUNC_GEN3) == 0 END +BEGIN BOOST_PP_IS_EMPTY(FUNC_GEN4) == 0 END +BEGIN BOOST_PP_IS_EMPTY(FUNC_GEN5) == 0 END +BEGIN BOOST_PP_IS_EMPTY(FUNC_GEN8) == 0 END +BEGIN BOOST_PP_IS_EMPTY(FUNC_GEN9) == 0 END +BEGIN BOOST_PP_IS_EMPTY(FUNC_GEN10) == 0 END + +#elif BOOST_PP_VARIADICS_MSVC /* Testing the VC++ variadic version */ /* INCORRECT */ diff --git a/test/isempty_variadic_standard_failure.cxx b/test/isempty_variadic_standard_failure.cxx index feee25f..557014f 100644 --- a/test/isempty_variadic_standard_failure.cxx +++ b/test/isempty_variadic_standard_failure.cxx @@ -15,9 +15,19 @@ #if BOOST_PP_VARIADICS && (BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()) && !BOOST_PP_VARIADICS_MSVC #define FUNC_GEN8(x,y) (1,2,3) + +#if defined(__cplusplus) && __cplusplus > 201703L +# include + +BEGIN BOOST_PP_IS_EMPTY(FUNC_GEN8) == BOOST_PP_VARIADIC_OPT() END + +#else + BEGIN BOOST_PP_IS_EMPTY(FUNC_GEN8) == 0 END +#endif + #else BEGIN 1 == 0 END diff --git a/test/isempty_variadic_standard_failure2.cxx b/test/isempty_variadic_standard_failure2.cxx index f51d497..c28bcd0 100644 --- a/test/isempty_variadic_standard_failure2.cxx +++ b/test/isempty_variadic_standard_failure2.cxx @@ -16,8 +16,18 @@ #define FUNC_GEN9(x,y,z) anything +#if defined(__cplusplus) && __cplusplus > 201703L + +# include + +BEGIN BOOST_PP_IS_EMPTY(FUNC_GEN9) == BOOST_PP_VARIADIC_OPT() END + +#else + BEGIN BOOST_PP_IS_EMPTY(FUNC_GEN9) == 0 END +#endif + #else BEGIN 1 == 0 END diff --git a/test/test.h b/test/test.h index a5b37d6..d1d60c3 100644 --- a/test/test.h +++ b/test/test.h @@ -14,24 +14,7 @@ # ifndef BOOST_LIBS_PREPROCESSOR_REGRESSION_TEST_H # define BOOST_LIBS_PREPROCESSOR_REGRESSION_TEST_H # -# include +# include +# include # -# define BEGIN typedef int BOOST_PP_CAT(test_, __LINE__)[(( -# define END )==1) ? 1 : -1]; - -#if defined(__cplusplus) -#include -#if !defined(_STLP_MSVC) || _STLP_MSVC >= 1300 -namespace std { } -using namespace std; -#endif -#else -#include -#endif - -int main(void) { - printf("pass " __TIME__); - return 0; -} - # endif diff --git a/test/test_macro.h b/test/test_macro.h new file mode 100644 index 0000000..f9fe1f4 --- /dev/null +++ b/test/test_macro.h @@ -0,0 +1,22 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_LIBS_PREPROCESSOR_REGRESSION_TEST_MACRO_H +# define BOOST_LIBS_PREPROCESSOR_REGRESSION_TEST_MACRO_H +# +# include +# +# define BEGIN typedef int BOOST_PP_CAT(test_, __LINE__)[(( +# define END )==1) ? 1 : -1]; +# +# endif diff --git a/test/test_main.h b/test/test_main.h new file mode 100644 index 0000000..23797c2 --- /dev/null +++ b/test/test_main.h @@ -0,0 +1,32 @@ +# /* Copyright (C) 2001 +# * Housemarque Oy +# * http://www.housemarque.com +# * +# * Distributed under the Boost Software License, Version 1.0. (See +# * accompanying file LICENSE_1_0.txt or copy at +# * http://www.boost.org/LICENSE_1_0.txt) +# */ +# +# /* Revised by Paul Mensonides (2002) */ +# +# /* See http://www.boost.org for most recent version. */ +# +# ifndef BOOST_LIBS_PREPROCESSOR_REGRESSION_TEST_MAIN_H +# define BOOST_LIBS_PREPROCESSOR_REGRESSION_TEST_MAIN_H +# +#if defined(__cplusplus) +#include +#if !defined(_STLP_MSVC) || _STLP_MSVC >= 1300 +namespace std { } +using namespace std; +#endif +#else +#include +#endif + +int main(void) { + printf("pass " __TIME__); + return 0; +} + +# endif From 22deb165b6c59fcd53308e0a9758d3a0fb22f8a9 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Wed, 25 Sep 2019 15:43:07 -0400 Subject: [PATCH 05/14] Documentation for variadic opt functionality. --- doc/headers.html | 1 + doc/headers/variadic.html | 3 +- doc/headers/variadic/opt.html | 25 +++++++++++++++ doc/ref.html | 1 + doc/ref/variadic_opt.html | 41 +++++++++++++++++++++++++ doc/syntax.html | 1 + doc/topics/variadic_macros.html | 26 ++++++++++++++-- include/boost/preprocessor/variadic.hpp | 1 + 8 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 doc/headers/variadic/opt.html create mode 100644 doc/ref/variadic_opt.html diff --git a/doc/headers.html b/doc/headers.html index 58f33db..7df8cb0 100644 --- a/doc/headers.html +++ b/doc/headers.html @@ -230,6 +230,7 @@
  • variadic.hpp
  • variadic/
  • elem.hpp (v)
  • +
  • opt.hpp
  • size.hpp (v)
  • to_array.hpp (v)
  • diff --git a/doc/headers/variadic.html b/doc/headers/variadic.html index 0acc99c..c555e95 100644 --- a/doc/headers/variadic.html +++ b/doc/headers/variadic.html @@ -14,6 +14,7 @@

    Includes


    - © Copyright Edward Diener 2011,2013 + © Copyright Edward Diener 2011,2013,2019

    Distributed under the Boost Software License, Version 1.0. (See diff --git a/doc/headers/variadic/opt.html b/doc/headers/variadic/opt.html new file mode 100644 index 0000000..d65d592 --- /dev/null +++ b/doc/headers/variadic/opt.html @@ -0,0 +1,25 @@ + + variadic/opt.hpp + +

    + The variadic/opt.hpp header defines a macro that determines whether or not the __VA_OPT__ construct is supported. +
    +

    Usage

    +
    + #include <boost/preprocessor/variadic/opt.hpp> +
    +

    Contents

    + +
    +
    + © Copyright Edward Diener 2019 +
    +
    +

    Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt or + copy at www.boost.org/LICENSE_1_0.txt)

    +
    + \ No newline at end of file diff --git a/doc/ref.html b/doc/ref.html index 102325a..749e881 100644 --- a/doc/ref.html +++ b/doc/ref.html @@ -298,6 +298,7 @@
  • VALUE
  • VARIADICS
  • VARIADIC_ELEM (v)
  • +
  • VARIADIC_OPT
  • VARIADIC_SEQ_TO_SEQ (v)
  • VARIADIC_SIZE (v)
  • VARIADIC_TO_ARRAY (v)
  • diff --git a/doc/ref/variadic_opt.html b/doc/ref/variadic_opt.html new file mode 100644 index 0000000..7383caa --- /dev/null +++ b/doc/ref/variadic_opt.html @@ -0,0 +1,41 @@ + + + BOOST_PP_VARIADIC_OPT + + + +
    The BOOST_PP_VARIADIC_OPT macro +determines whether or not the C++20 __VA_OPT__ construct is supported for the compiler's preprocessor being used. +Expands to 1 if the __VA_OPT__ construct is supported, otherwise expands to 0. +
    +

    Usage

    +
    BOOST_PP_VARIADIC_OPT()
    +
    +

    Arguments

    +
    +
    None
    +
    +
    +

    Requirements

    + +

    Sample Code

    +
    +
    +#include <boost/preprocessor/variadic/opt.hpp>
    +#if BOOST_PP_VARIADIC_OPT()
    +// Preprocessor code which uses __VA_OPT__
    +#else
    +// Preprocessor code which does not use __VA_OPT__
    +#endif
    +
    +
    +
    +
    © Copyright Edward Diener 2019
    +
    +

    Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt +or copy at www.boost.org/LICENSE_1_0.txt)

    +
    + + diff --git a/doc/syntax.html b/doc/syntax.html index abc0b2a..68dd9f6 100644 --- a/doc/syntax.html +++ b/doc/syntax.html @@ -284,6 +284,7 @@
    BOOST_PP_VALUE
    BOOST_PP_VARIADIC_ELEM +
    BOOST_PP_VARIADIC_OPT
    BOOST_PP_VARIADIC_SIZE
    BOOST_PP_VARIADIC_TO_ARRAY
    BOOST_PP_VARIADIC_TO_LIST diff --git a/doc/topics/variadic_macros.html b/doc/topics/variadic_macros.html index 985b9eb..5ecbd18 100644 --- a/doc/topics/variadic_macros.html +++ b/doc/topics/variadic_macros.html @@ -136,6 +136,27 @@ use this variadic data reliably as arguments to other macros, one needs variadic macro support.
    +

    C++20 Support For Variadic Macros

    +
    + In the C++20 specification there is a new construct which can be + used in the expansion of a variadic macro, called __VA_OPT__. This + construct when used in the expansion of a variadic macro is followed + by an opening paranthesis ('('), preprocessor data, and a closing + parenthesis ('}'). When the variadic data passed by the invocation + of a variadic macro is empty, this new construct expands to nothing. + When the variadic data passed by the invocation of a variadic macro + is not empty, this new construct expands to the preprocessor data + between its opening and closing parentheses. +

    + This library offers support for this new C++20 construct by automatically + detecting whether this new construct is supported by the compiler's + preprocessor when using the library. The library macro which detects + support for the __VA_OPT__ construct is called BOOST_PP_VARIADIC_OPT. + This is a function-like macro which takes no parameters and returns + 1 if the compiler is working in C++20 mode and supports the __VA_OPT__ + construct, while otherwise it returns 0. +
    +
    Using a Tuple Instead of an Array
    An array as a preprocessor data type is a two-element tuple where the @@ -257,6 +278,5 @@ (See accompanying file LICENSE_1_0.txt or copy at www.boost.org/LICENSE_1_0.txt)

    - - - \ No newline at end of file + + \ No newline at end of file diff --git a/include/boost/preprocessor/variadic.hpp b/include/boost/preprocessor/variadic.hpp index a28e026..c2c37f2 100644 --- a/include/boost/preprocessor/variadic.hpp +++ b/include/boost/preprocessor/variadic.hpp @@ -14,6 +14,7 @@ # define BOOST_PREPROCESSOR_VARIADIC_HPP # # include +# include # include # include # include From 0cdd09e6e15f86ff898ffd045738aadca3d3c97e Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Thu, 26 Sep 2019 00:43:46 -0400 Subject: [PATCH 06/14] Change to a less wasteful use of BOOST_PP_VARIADIC_OPT in BOOST_PP_IS_EMPTY code. --- .../facilities/is_empty_variadic.hpp | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/include/boost/preprocessor/facilities/is_empty_variadic.hpp b/include/boost/preprocessor/facilities/is_empty_variadic.hpp index 403e74b..653854d 100644 --- a/include/boost/preprocessor/facilities/is_empty_variadic.hpp +++ b/include/boost/preprocessor/facilities/is_empty_variadic.hpp @@ -16,20 +16,6 @@ # # if BOOST_PP_VARIADICS # -# include -# -# if BOOST_PP_VARIADIC_OPT() -# -#define BOOST_PP_IS_EMPTY_FUNCTION2(...) \ - __VA_OPT__(0,) 1 \ -/**/ -#define BOOST_PP_IS_EMPTY_FUNCTION(...) \ - BOOST_PP_IS_EMPTY_FUNCTION2(__VA_ARGS__) \ -/**/ -#define BOOST_PP_IS_EMPTY(...) \ - BOOST_PP_VARIADIC_OPT_ELEM0(BOOST_PP_IS_EMPTY_FUNCTION(__VA_ARGS__),) \ -/**/ -# else # include # include # @@ -51,7 +37,19 @@ /**/ #define BOOST_PP_IS_EMPTY_ZERO(param) 0 # else +# include #define BOOST_PP_IS_EMPTY(...) \ + BOOST_PP_DETAIL_IS_EMPTY_IIF \ + ( \ + BOOST_PP_VARIADIC_OPT() \ + ) \ + ( \ + BOOST_PP_IS_EMPTY_OPT, \ + BOOST_PP_IS_EMPTY_NO_OPT \ + ) \ + (__VA_ARGS__) \ +/**/ +#define BOOST_PP_IS_EMPTY_NO_OPT(...) \ BOOST_PP_DETAIL_IS_EMPTY_IIF \ ( \ BOOST_PP_IS_BEGIN_PARENS \ @@ -66,7 +64,15 @@ (__VA_ARGS__) \ /**/ #define BOOST_PP_IS_EMPTY_ZERO(...) 0 +#define BOOST_PP_IS_EMPTY_FUNCTION2(...) \ + __VA_OPT__(0,) 1 \ +/**/ +#define BOOST_PP_IS_EMPTY_FUNCTION(...) \ + BOOST_PP_IS_EMPTY_FUNCTION2(__VA_ARGS__) \ +/**/ +#define BOOST_PP_IS_EMPTY_OPT(...) \ + BOOST_PP_VARIADIC_OPT_ELEM0(BOOST_PP_IS_EMPTY_FUNCTION(__VA_ARGS__),) \ +/**/ # endif /* BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400 */ -# endif /* BOOST_PP_VARIADIC_OPT() */ # endif /* BOOST_PP_VARIADICS */ # endif /* BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_VARIADIC_HPP */ From a42f374b97e338cac17eaf7c5daf0b92c8278d63 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Thu, 26 Sep 2019 01:19:31 -0400 Subject: [PATCH 07/14] Updated example for using the BOOST_PP_VARIADIC_OPT macro. --- doc/ref/variadic_opt.html | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/doc/ref/variadic_opt.html b/doc/ref/variadic_opt.html index 7383caa..d8c425a 100644 --- a/doc/ref/variadic_opt.html +++ b/doc/ref/variadic_opt.html @@ -23,11 +23,20 @@ Expands to 1 if the __VA_OPT__ construct is supported, otherwise expands to 0.
     #include <boost/preprocessor/variadic/opt.hpp>
    -#if BOOST_PP_VARIADIC_OPT()
    -// Preprocessor code which uses __VA_OPT__
    -#else
    -// Preprocessor code which does not use __VA_OPT__
    -#endif
    +#if BOOST_PP_VARIADIC_OPT() +// Preprocessor code which uses __VA_OPT__ +#else +// Preprocessor code which does not use __VA_OPT__ +#endif +
    +
    +or within a macro definition

    +
    +#include <boost/preprocessor/control/iif.hpp>
    +#include <boost/preprocessor/variadic/opt.hpp>
    +#define USE_OPT(...) BOOST_PP_IIF(BOOST_PP_VARIADIC_OPT(),MACRO_USING_OPT,MACRO_NOT_USING_OPT)(__VA_ARGS__) +#define MACRO_USING_OPT(...) __VA_OPT__( preprocessor tokens ) anything +#define MACRO_NOT_USING_OPT(...) anything

    From 684e9991ec34f7524331e593e44ad72c1c4112bc Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Thu, 26 Sep 2019 15:05:17 -0400 Subject: [PATCH 08/14] Only include macro if allowable. --- include/boost/preprocessor/facilities/is_empty_variadic.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/boost/preprocessor/facilities/is_empty_variadic.hpp b/include/boost/preprocessor/facilities/is_empty_variadic.hpp index 653854d..1c1e3d1 100644 --- a/include/boost/preprocessor/facilities/is_empty_variadic.hpp +++ b/include/boost/preprocessor/facilities/is_empty_variadic.hpp @@ -1,6 +1,6 @@ # /* ************************************************************************** # * * -# * (C) Copyright Edward Diener 2014. +# * (C) Copyright Edward Diener 2014,2019. # * 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) @@ -64,9 +64,11 @@ (__VA_ARGS__) \ /**/ #define BOOST_PP_IS_EMPTY_ZERO(...) 0 +#if BOOST_PP_VARIADIC_OPT() #define BOOST_PP_IS_EMPTY_FUNCTION2(...) \ __VA_OPT__(0,) 1 \ /**/ +#endif #define BOOST_PP_IS_EMPTY_FUNCTION(...) \ BOOST_PP_IS_EMPTY_FUNCTION2(__VA_ARGS__) \ /**/ From 2f9be1086a59447904b672cc5b76a0b80033d833 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Thu, 26 Sep 2019 16:07:03 -0400 Subject: [PATCH 09/14] Less wasteful inclusion. --- include/boost/preprocessor/facilities/is_empty_variadic.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/boost/preprocessor/facilities/is_empty_variadic.hpp b/include/boost/preprocessor/facilities/is_empty_variadic.hpp index 1c1e3d1..f194a3f 100644 --- a/include/boost/preprocessor/facilities/is_empty_variadic.hpp +++ b/include/boost/preprocessor/facilities/is_empty_variadic.hpp @@ -64,7 +64,7 @@ (__VA_ARGS__) \ /**/ #define BOOST_PP_IS_EMPTY_ZERO(...) 0 -#if BOOST_PP_VARIADIC_OPT() +# if defined(__cplusplus) && __cplusplus > 201703L #define BOOST_PP_IS_EMPTY_FUNCTION2(...) \ __VA_OPT__(0,) 1 \ /**/ From 4cce94a84ec47903570754e2324fa46415d23d2a Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Fri, 27 Sep 2019 09:44:15 -0400 Subject: [PATCH 10/14] Segregate C20 macros code from other macros for BOOST_PP_IS_EMPTY --- .../facilities/is_empty_variadic.hpp | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/include/boost/preprocessor/facilities/is_empty_variadic.hpp b/include/boost/preprocessor/facilities/is_empty_variadic.hpp index f194a3f..4beb3c9 100644 --- a/include/boost/preprocessor/facilities/is_empty_variadic.hpp +++ b/include/boost/preprocessor/facilities/is_empty_variadic.hpp @@ -37,6 +37,7 @@ /**/ #define BOOST_PP_IS_EMPTY_ZERO(param) 0 # else +# if defined(__cplusplus) && __cplusplus > 201703L # include #define BOOST_PP_IS_EMPTY(...) \ BOOST_PP_DETAIL_IS_EMPTY_IIF \ @@ -49,6 +50,20 @@ ) \ (__VA_ARGS__) \ /**/ +#define BOOST_PP_IS_EMPTY_FUNCTION2(...) \ + __VA_OPT__(0,) 1 \ +/**/ +#define BOOST_PP_IS_EMPTY_FUNCTION(...) \ + BOOST_PP_IS_EMPTY_FUNCTION2(__VA_ARGS__) \ +/**/ +#define BOOST_PP_IS_EMPTY_OPT(...) \ + BOOST_PP_VARIADIC_OPT_ELEM0(BOOST_PP_IS_EMPTY_FUNCTION(__VA_ARGS__),) \ +/**/ +# else +#define BOOST_PP_IS_EMPTY(...) \ + BOOST_PP_IS_EMPTY_NO_OPT(__VA_ARGS__) \ +/**/ +# endif /* defined(__cplusplus) && __cplusplus > 201703L */ #define BOOST_PP_IS_EMPTY_NO_OPT(...) \ BOOST_PP_DETAIL_IS_EMPTY_IIF \ ( \ @@ -64,17 +79,6 @@ (__VA_ARGS__) \ /**/ #define BOOST_PP_IS_EMPTY_ZERO(...) 0 -# if defined(__cplusplus) && __cplusplus > 201703L -#define BOOST_PP_IS_EMPTY_FUNCTION2(...) \ - __VA_OPT__(0,) 1 \ -/**/ -#endif -#define BOOST_PP_IS_EMPTY_FUNCTION(...) \ - BOOST_PP_IS_EMPTY_FUNCTION2(__VA_ARGS__) \ -/**/ -#define BOOST_PP_IS_EMPTY_OPT(...) \ - BOOST_PP_VARIADIC_OPT_ELEM0(BOOST_PP_IS_EMPTY_FUNCTION(__VA_ARGS__),) \ -/**/ # endif /* BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400 */ # endif /* BOOST_PP_VARIADICS */ # endif /* BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_VARIADIC_HPP */ From e439b2555e28fb1a98cd70ae86793b02d08d319f Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Fri, 27 Sep 2019 13:44:19 -0400 Subject: [PATCH 11/14] Updated name and parameters for clang cuda test. --- test/Jamfile.v2 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 38ebc88..8c89dd0 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -248,12 +248,14 @@ alias preprocessor_config [ run config_info.cpp ] ; -alias clang_cuda +alias test_clang_cuda : [ compile clang_cuda.cu : --cuda-gpu-arch=sm_20 + -nocudalib + --no-cuda-version-check : clang_cuda_cu ] ; -explicit clang_cuda ; +explicit test_clang_cuda ; From 54669af127cc05ae02169ff83cc00561c5fda580 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Fri, 27 Sep 2019 22:15:18 -0400 Subject: [PATCH 12/14] Fixed macro testing for __VA_OPT__ support. --- include/boost/preprocessor/variadic/detail/opt.hpp | 2 +- include/boost/preprocessor/variadic/opt.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/boost/preprocessor/variadic/detail/opt.hpp b/include/boost/preprocessor/variadic/detail/opt.hpp index 3b50850..e5798ee 100644 --- a/include/boost/preprocessor/variadic/detail/opt.hpp +++ b/include/boost/preprocessor/variadic/detail/opt.hpp @@ -17,7 +17,7 @@ # if BOOST_PP_VARIADICS && defined(__cplusplus) && __cplusplus > 201703L # # define BOOST_PP_VARIADIC_OPT_FUNCTION(...) \ - __VA_OPT__(0,) 0, 0, 1 \ + __VA_OPT__(,) , 1, 0 \ /**/ # # define BOOST_PP_VARIADIC_OPT_ELEM0(e0, ...) BOOST_PP_VARIADIC_OPT_ELEM_0(e0,__VA_ARGS__) diff --git a/include/boost/preprocessor/variadic/opt.hpp b/include/boost/preprocessor/variadic/opt.hpp index c26b0d8..09d37c4 100644 --- a/include/boost/preprocessor/variadic/opt.hpp +++ b/include/boost/preprocessor/variadic/opt.hpp @@ -19,7 +19,7 @@ # if BOOST_PP_VARIADICS && defined(__cplusplus) && __cplusplus > 201703L # include # define BOOST_PP_VARIADIC_OPT() \ - BOOST_PP_VARIADIC_OPT_ELEM2(BOOST_PP_VARIADIC_OPT_FUNCTION(),) \ + BOOST_PP_VARIADIC_OPT_ELEM2(BOOST_PP_VARIADIC_OPT_FUNCTION(?),) \ /**/ # else # define BOOST_PP_VARIADIC_OPT() 0 From b7b1425c7f2eac18f32760b9e20cdc8bd68ce42c Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Sat, 28 Sep 2019 11:25:09 -0400 Subject: [PATCH 13/14] Remove duplicate printing of a macro in this test. --- test/config_info.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/config_info.cpp b/test/config_info.cpp index f800aa7..23de991 100644 --- a/test/config_info.cpp +++ b/test/config_info.cpp @@ -1,6 +1,6 @@ # /* ************************************************************************** # * * -# * (C) Copyright Edward Diener 2014. +# * (C) Copyright Edward Diener 2014,2019. # * 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) @@ -94,7 +94,6 @@ void print_macros() PRINT_MACRO(BOOST_PP_CONFIG_FLAGS()); PRINT_MACRO(BOOST_PP_VARIADICS); PRINT_MACRO(BOOST_PP_VARIADICS_MSVC); - PRINT_MACRO(BOOST_PP_VARIADICS_MSVC); PRINT_MACRO(BOOST_PP_VARIADIC_OPT()); } From af70b2872ea920edaef16a489d85fd24eb231060 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Wed, 2 Oct 2019 18:52:09 -0400 Subject: [PATCH 14/14] Updated for compiling a CUDA file with clang. --- test/Jamfile.v2 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 8c89dd0..51b6b1c 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -3,6 +3,7 @@ #~ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) import testing ; +import cast ; project preprocessor_tests : requirements on gcc-4.3.0:all @@ -250,10 +251,10 @@ alias preprocessor_config alias test_clang_cuda : - [ compile clang_cuda.cu - : --cuda-gpu-arch=sm_20 - -nocudalib - --no-cuda-version-check + [ compile [ cast _ cpp : clang_cuda.cu ] + : -nocudalib + -nocudainc + "-x cuda" : clang_cuda_cu ] ;