Merge branch 'develop'

This commit is contained in:
Edward Diener
2019-10-04 22:51:14 -04:00
56 changed files with 651 additions and 325 deletions

View File

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

View File

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

View File

@ -230,6 +230,7 @@
<li><a href="headers/variadic.html">variadic.hpp</a></li>
<li>variadic/</li>
<li class="ps"><a href="headers/variadic/elem.html">elem.hpp</a> <a href="topics/variadic_macros.html#VNotation">(v)</a></li>
<li class="ps"><a href="headers/variadic/opt.html">opt.hpp</a> </li>
<li class="ps"><a href="headers/variadic/size.html">size.hpp</a> <a href="topics/variadic_macros.html#VNotation">(v)</a></li>
<li class="ps"><a href="headers/variadic/to_array.html">to_array.hpp</a> <a
href="topics/variadic_macros.html#VNotation">(v)</a></li>

View File

@ -14,6 +14,7 @@
<h4>Includes</h4>
<ul>
<li><a href="variadic/elem.html">&lt;boost/preprocessor/variadic/elem.hpp&gt;</a> <a href="../topics/variadic_macros.html#VNotation" target="_self">(v)</a></li>
<li><a href="variadic/opt.html">&lt;boost/preprocessor/variadic/opt.hpp&gt;</a> </li>
<li><a href="variadic/size.html">&lt;boost/preprocessor/variadic/size.hpp&gt;</a> <a href="../topics/variadic_macros.html#VNotation" target="_self">(v)</a></li>
<li><a href="variadic/to_array.html">&lt;boost/preprocessor/variadic/to_array.hpp&gt;</a> <a href="../topics/variadic_macros.html#VNotation" target="_self">(v)</a></li>
<li><a href="variadic/to_list.html">&lt;boost/preprocessor/variadic/to_list.hpp&gt;</a> <a href="../topics/variadic_macros.html#VNotation" target="_self">(v)</a></li>
@ -22,7 +23,7 @@
</ul>
<hr size="1">
<div style="margin-left: 0px;">
<i></i><i><EFBFBD> Copyright Edward Diener 2011,2013</i>
<i></i><i><EFBFBD> Copyright Edward Diener 2011,2013,2019</i>
</div>
<div style="margin-left: 0px;">
<p><small>Distributed under the Boost Software License, Version 1.0. (See

View File

@ -0,0 +1,25 @@
<html><head>
<title>variadic/opt.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css"></head><body>
<div style="margin-left: 0px;">
The <b>variadic/opt.hpp</b> header defines a macro that determines whether or not the __VA_OPT__ construct is supported.
</div>
<h4>Usage</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/variadic/opt.hpp&gt;</b>
</div>
<h4>Contents</h4>
<ul>
<li><a href="../../ref/variadic_opt.html">BOOST_PP_VARIADIC_OPT</a> <br>
</li>
</ul>
<hr size="1">
<div style="margin-left: 0px;">
<i></i><i><EFBFBD> Copyright Edward Diener 2019</i>
</div>
<div style="margin-left: 0px;">
<p><small>Distributed under the Boost Software License, Version 1.0. (See
accompanying file <a href="../../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or
copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</small></p>
</div>
</body></html>

View File

@ -298,6 +298,7 @@
<li><a href="ref/value.html">VALUE</a></li>
<li><a href="ref/variadics.html">VARIADICS</a></li>
<li><a href="ref/variadic_elem.html">VARIADIC_ELEM</a> <a href="topics/variadic_macros.html#VNotation">(v)</a></li>
<li><a href="ref/variadic_opt.html">VARIADIC_OPT</a></li>
<li><a href="ref/variadic_seq_to_seq.html">VARIADIC_SEQ_TO_SEQ</a> <a href="topics/variadic_macros.html#VNotation">(v)</a></li>
<li><a href="ref/variadic_size.html">VARIADIC_SIZE</a> <a href="topics/variadic_macros.html#VNotation">(v)</a></li>
<li><a href="ref/variadic_to_array.html">VARIADIC_TO_ARRAY</a> <a href="topics/variadic_macros.html#VNotation">(v)</a></li>

View File

@ -30,5 +30,13 @@
<h4> Requirements </h4>
<div> <b>Header:</b> &nbsp;<a href="../headers/list/to_array.html">&lt;boost/preprocessor/list/to_array.hpp&gt;</a>
</div>
<hr size="1">
<div style="margin-left: 0px;"> <i></i><i>© Copyright Edward Diener 2011</i>
</div>
<div style="margin-left: 0px;">
<p><small>Distributed under the Boost Software License, Version 1.0. (See
accompanying file <a href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a>
or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</small></p>
</div>
</body>
</html>

View File

@ -28,5 +28,12 @@
<h4> Requirements </h4>
<div> <b>Header:</b> &nbsp;<a href="../headers/list/to_seq.html">&lt;boost/preprocessor/list/to_seq.hpp&gt;</a>
</div>
<hr size="1">
<div style="margin-left: 0px;"> <i>© Copyright Edward Diener 2011</i> </div>
<div style="margin-left: 0px;">
<p><small>Distributed under the Boost Software License, Version 1.0. (See
accompanying file <a href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a>
or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</small></p>
</div>
</body>
</html>

View File

@ -49,7 +49,7 @@ or<br>
<b>Header:</b> &nbsp;<a href="../headers/tuple/elem.html">&lt;boost/preprocessor/tuple/elem.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>#include &lt;<a href="../headers/tuple/elem.html">boost/preprocessor/tuple/elem.hpp</a>&gt;<br><br>#define TUPLE (a, b, c, d)<br><br><a href="tuple_elem.html">BOOST_PP_TUPLE_ELEM</a>(4, 0, TUPLE) // expands to a<br><a href="tuple_elem.html">BOOST_PP_TUPLE_ELEM</a>(4, 3, TUPLE) // expands to d<br><br>// or for the variadic version <a href="../topics/variadic_macros.html#VNotation" target="_self"><sup>(v)</sup></a><br><br><a href="tuple_elem.html">BOOST_PP_TUPLE_ELEM</a>(0, TUPLE) // expands to a in the variadic version<br><a href="file:///C:/Programming/VersionControl/sandbox/variadics/libs/preprocessor/doc/ref/tuple_elem.html">BOOST_PP_TUPLE_ELEM</a>(3, TUPLE) // expands to d in the variadic version<br></pre></div>
<div><pre>#include &lt;<a href="../headers/tuple/elem.html">boost/preprocessor/tuple/elem.hpp</a>&gt;<br><br>#define TUPLE (a, b, c, d)<br><br><a href="tuple_elem.html">BOOST_PP_TUPLE_ELEM</a>(4, 0, TUPLE) // expands to a<br><a href="tuple_elem.html">BOOST_PP_TUPLE_ELEM</a>(4, 3, TUPLE) // expands to d<br><br>// or for the variadic version <a href="../topics/variadic_macros.html#VNotation" target="_self"><sup>(v)</sup></a><br><br><a href="tuple_elem.html">BOOST_PP_TUPLE_ELEM</a>(0, TUPLE) // expands to a in the variadic version<br><a href="tuple_elem.html">BOOST_PP_TUPLE_ELEM</a>(3, TUPLE) // expands to d in the variadic version<br></pre></div>
<hr size="1">
<div style="margin-left: 0px;">
<i><EFBFBD> Copyright <a href="http://www.housemarque.com" target="_top">Housemarque Oy</a> 2002</i>

50
doc/ref/variadic_opt.html Normal file
View File

@ -0,0 +1,50 @@
<html>
<head>
<title>BOOST_PP_VARIADIC_OPT</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;"> The <b>BOOST_PP_VARIADIC_OPT</b> 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.
</div>
<h4>Usage</h4>
<div class="code"> <b>BOOST_PP_VARIADIC_OPT</b>() <br>
</div>
<h4>Arguments</h4>
<dl>
<dt>None<br>
</dt>
</dl>
<h4>Requirements</h4>
<div> <b>Header:</b> &nbsp;<a href="../headers/variadic/opt.html">&lt;boost/preprocessor/variadic/opt.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div>
<pre>
#include &lt;<a href="../headers/variadic/opt.html">boost/preprocessor/variadic/opt.hpp</a>&gt;<br>
#if <a href="variadic_opt.html">BOOST_PP_VARIADIC_OPT</a>()
// Preprocessor code which uses __VA_OPT__
#else
// Preprocessor code which does not use __VA_OPT__
#endif
</pre>
<br>
or within a macro definition<br><br>
<pre>
#include &lt;boost/preprocessor/control/iif.hpp&gt;
#include &lt;<a href="../headers/variadic/opt.html">boost/preprocessor/variadic/opt.hpp</a>&gt;<br>
#define USE_OPT(...) BOOST_PP_IIF(<a href="variadic_opt.html">BOOST_PP_VARIADIC_OPT</a>(),MACRO_USING_OPT,MACRO_NOT_USING_OPT)(__VA_ARGS__)
#define MACRO_USING_OPT(...) __VA_OPT__( preprocessor tokens ) anything
#define MACRO_NOT_USING_OPT(...) anything
</pre>
</div>
<hr size="1">
<div style="margin-left: 0px;"> <i></i><i><EFBFBD> Copyright Edward Diener 2019</i> </div>
<div style="margin-left: 0px;">
<p><small>Distributed under the Boost Software License, Version 1.0.
(See accompanying file <a href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a>
or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</small></p>
</div>
</body>
</html>

View File

@ -284,6 +284,7 @@
<!-- V -->
<br>BOOST_PP_VALUE
<br>BOOST_PP_VARIADIC_ELEM
<br>BOOST_PP_VARIADIC_OPT
<br>BOOST_PP_VARIADIC_SIZE
<br>BOOST_PP_VARIADIC_TO_ARRAY
<br>BOOST_PP_VARIADIC_TO_LIST

View File

@ -136,6 +136,27 @@
use this variadic data reliably as arguments to other macros, one needs
variadic macro support.<br>
</div>
<h4>C++20 Support For Variadic Macros</h4>
<div>
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.
<br><br>
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.
<br>
</div>
<u style="font-weight: bold;"> Using a Tuple Instead of an Array<br>
</u>
<div>An array as a preprocessor data type is a two-element tuple where the
@ -257,6 +278,5 @@
(See accompanying file <a href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a>
or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</small></p>
</div>
</body></html>
</body>
</html>

View File

@ -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 */

View File

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

View File

@ -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)
#

View File

@ -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)
#

View File

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

View File

@ -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__ () \
) \

View File

@ -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)
@ -37,7 +37,34 @@
/**/
#define BOOST_PP_IS_EMPTY_ZERO(param) 0
# else
# if defined(__cplusplus) && __cplusplus > 201703L
# include <boost/preprocessor/variadic/opt.hpp>
#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_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 \
( \
BOOST_PP_IS_BEGIN_PARENS \

View File

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

View File

@ -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)
#

View File

@ -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)
#

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -20,9 +20,9 @@
# include <boost/preprocessor/control/iif.hpp>
# include <boost/preprocessor/facilities/is_1.hpp>
# include <boost/preprocessor/tuple/size.hpp>
# 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 */

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -14,6 +14,7 @@
# define BOOST_PREPROCESSOR_VARIADIC_HPP
#
# include <boost/preprocessor/variadic/elem.hpp>
# include <boost/preprocessor/variadic/opt.hpp>
# include <boost/preprocessor/variadic/size.hpp>
# include <boost/preprocessor/variadic/to_array.hpp>
# include <boost/preprocessor/variadic/to_list.hpp>

View File

@ -20,9 +20,9 @@
# include <boost/preprocessor/control/iif.hpp>
# include <boost/preprocessor/facilities/is_1.hpp>
# include <boost/preprocessor/variadic/size.hpp>
# 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 */

View File

@ -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 <boost/preprocessor/config/config.hpp>
#
# if BOOST_PP_VARIADICS && defined(__cplusplus) && __cplusplus > 201703L
#
# define BOOST_PP_VARIADIC_OPT_FUNCTION(...) \
__VA_OPT__(,) , 1, 0 \
/**/
#
# 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

View File

@ -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/preprocessor/config/config.hpp>
#
# /* BOOST_PP_VARIADIC_OPT */
#
# if BOOST_PP_VARIADICS && defined(__cplusplus) && __cplusplus > 201703L
# include <boost/preprocessor/variadic/detail/opt.hpp>
# define BOOST_PP_VARIADIC_OPT() \
BOOST_PP_VARIADIC_OPT_ELEM2(BOOST_PP_VARIADIC_OPT_FUNCTION(?),) \
/**/
# else
# define BOOST_PP_VARIADIC_OPT() 0
# endif
#
# endif

View File

@ -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 <warnings>on
<toolset>gcc-4.3.0:<warnings>all
@ -247,3 +248,15 @@ alias preprocessor_config
:
[ run config_info.cpp ]
;
alias test_clang_cuda
:
[ compile [ cast _ cpp : clang_cuda.cu ]
: <cxxflags>-nocudalib
<cxxflags>-nocudainc
<cxxflags>"-x cuda"
: clang_cuda_cu
]
;
explicit test_clang_cuda ;

26
test/clang_cuda.cu Normal file
View File

@ -0,0 +1,26 @@
# /* **************************************************************************
# * *
# * (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 <libs/preprocessor/test/test_macro.h>
#if defined(__clang__) && defined(__CUDACC__) && defined(__CUDA__)
BEGIN BOOST_PP_VARIADICS == 1 END
#else
BEGIN 0 == 1 END
#endif
int main(void) {
return 0;
}

View File

@ -1,7 +1,19 @@
# /* **************************************************************************
# * *
# * (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)
# * *
# ************************************************************************** */
#
# /* See http://www.boost.org for most recent version. */
#
#include <iostream>
#include <iomanip>
#include <string.h>
#include <boost/preprocessor/stringize.hpp>
#include <boost/preprocessor/variadic/opt.hpp>
static unsigned int indent = 4;
static unsigned int width = 40;
@ -82,6 +94,7 @@ void print_macros()
PRINT_MACRO(BOOST_PP_CONFIG_FLAGS());
PRINT_MACRO(BOOST_PP_VARIADICS);
PRINT_MACRO(BOOST_PP_VARIADICS_MSVC);
PRINT_MACRO(BOOST_PP_VARIADIC_OPT());
}
int main()

View File

@ -38,7 +38,20 @@
#if BOOST_PP_VARIADICS
#if BOOST_PP_VARIADICS_MSVC /* Testing the VC++ variadic version */
# include <boost/preprocessor/variadic/opt.hpp>
#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 */

View File

@ -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 <boost/preprocessor/variadic/opt.hpp>
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

View File

@ -16,8 +16,18 @@
#define FUNC_GEN9(x,y,z) anything
#if defined(__cplusplus) && __cplusplus > 201703L
# include <boost/preprocessor/variadic/opt.hpp>
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

View File

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

View File

@ -14,24 +14,7 @@
# ifndef BOOST_LIBS_PREPROCESSOR_REGRESSION_TEST_H
# define BOOST_LIBS_PREPROCESSOR_REGRESSION_TEST_H
#
# include <boost/preprocessor/cat.hpp>
# include <libs/preprocessor/test/test_macro.h>
# include <libs/preprocessor/test/test_main.h>
#
# define BEGIN typedef int BOOST_PP_CAT(test_, __LINE__)[((
# define END )==1) ? 1 : -1];
#if defined(__cplusplus)
#include <cstdio>
#if !defined(_STLP_MSVC) || _STLP_MSVC >= 1300
namespace std { }
using namespace std;
#endif
#else
#include <stdio.h>
#endif
int main(void) {
printf("pass " __TIME__);
return 0;
}
# endif

22
test/test_macro.h Normal file
View File

@ -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 <boost/preprocessor/cat.hpp>
#
# define BEGIN typedef int BOOST_PP_CAT(test_, __LINE__)[((
# define END )==1) ? 1 : -1];
#
# endif

32
test/test_main.h Normal file
View File

@ -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 <cstdio>
#if !defined(_STLP_MSVC) || _STLP_MSVC >= 1300
namespace std { }
using namespace std;
#endif
#else
#include <stdio.h>
#endif
int main(void) {
printf("pass " __TIME__);
return 0;
}
# endif

View File

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