Updated the docs for limitations.

This commit is contained in:
Edward Diener
2020-08-23 20:12:06 -04:00
parent 5d70c1fc7b
commit f977ee0cd9
13 changed files with 637 additions and 271 deletions

View File

@ -1,32 +1,38 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>config/config.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>config/config.hpp</b>
header defines internal configuration macros as well as a macro for determining variadic macro support. The file
is automatically included whenever any Boost PP macros are used. The end-user can manually
include it in order to use the BOOST_PP_VARIADICS macro, but normally should never have to do so. </div>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/config/config.hpp&gt;</b>
</div>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/variadics.html">BOOST_PP_VARIADICS</a></li></ul>
<hr size="1">
<div style="margin-left: 0px;"><i><EFBFBD> Copyright Edward Diener 2011,2014</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>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<title>config/config.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;"> The <b>config/config.hpp</b>
header defines internal configuration macros as well as macros for
determining variadic macro support and for determining whether the
compiler's preprocessor conforms to the standard. The file
is automatically included whenever any Boost PP macros are used.
The end-user can manually
include it in order to use the BOOST_PP_VARIADICS macro or the
BOOST_PP_IS_STANDARD macro, but normally should never have to do
so.</div>
<h4> Usage </h4>
<div class="code"> #include <b>&lt;boost/preprocessor/config/config.hpp&gt;</b>
</div>
<h4> Contents </h4>
<ul>
<li><a href="../../ref/variadics.html">BOOST_PP_VARIADICS</a></li>
<li><a href="../../ref/is_standard.html">BOOST_PP_IS_STANDARD</a><br>
</li>
</ul>
<hr size="1">
<div style="margin-left: 0px;"><i><EFBFBD> Copyright Edward Diener
2011,2014</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

@ -110,6 +110,7 @@
<li><a href="ref/is_begin_parens.html">IS_BEGIN_PARENS</a> <a href="topics/variadic_macros.html#VNotation">(v)</a></li>
<li><a href="ref/is_iterating.html">IS_ITERATING</a></li>
<li><a href="ref/is_selfish.html">IS_SELFISH</a></li>
<li><a href="ref/is_standard.html">IS_STANDARD</a></li>
<li><a href="ref/iterate.html">ITERATE</a></li>
<li><a href="ref/iteration.html">ITERATION</a></li>
<li><a href="ref/iteration_depth.html">ITERATION_DEPTH</a></li>

44
doc/ref/is_standard.html Normal file
View File

@ -0,0 +1,44 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<title>BOOST_PP_IS_STANDARD</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;"> The <b>BOOST_PP_IS_STANDARD </b>macro
specifies whether the compiler's preprocessor is a standard
conforming one or not.<br>
</div>
<h4>Usage</h4>
<div class="code"><b>BOOST_PP_IS_STANDARD()</b><br>
</div>
<b>Remarks</b>
<div> The macro is a <i>function-like</i> macro taking no
parameters. It is used to check if the compiler's preprocessor is
standard conforming. One use for the end-user is to see if <a
href="../topics/limitations.html">limitations</a> can be
changed, since changes will only take affect for standard
conforming preprocessors. The macro expands to 1 if
the compiler's preprocessor is standard conforming and 0 if it is
not.</div>
<b>Requirements</b>
<div> <b>Header:</b> &nbsp;<a
href="../headers/config/variadics.html">&lt;boost/preprocessor/config/config.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div>
<pre>// Beginning of source file<br><br>#include &lt;<a href="../headers/config/variadics.html">boost/preprocessor/config/config.hpp</a>&gt;<br><br>#if <a href="variadics.html">BOOST_PP_IS_STANDARD()</a><br>#define BOOST_PP_LIMIT_MAG 512<br>#endif<br><br>#include &lt;boost/preprocessor/arithmetic.hpp&gt; // etc.<br></pre>
</div>
<hr size="1">
<div style="margin-left: 0px;"> <i><EFBFBD> Copyright Edward Diener 2020</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

@ -1,34 +1,36 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>BOOST_PP_LIMIT_FOR</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_LIMIT_FOR</b> macro defines the maximum number of <b>BOOST_PP_FOR</b> repetitions.
</div>
<h4>Usage</h4>
<div class="code">
<b>BOOST_PP_LIMIT_FOR</b>
</div>
<h4>Remarks</h4>
<div>
This macro currently expands to <i>256</i>.
</div>
<h4>Requirements</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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>
</br><i><EFBFBD> Copyright Paul Mensonides 2002</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>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<title>BOOST_PP_LIMIT_FOR</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;"> The <b>BOOST_PP_LIMIT_FOR</b> macro
defines the maximum number of <b>BOOST_PP_FOR</b> repetitions. </div>
<h4>Usage</h4>
<div class="code"> <b>BOOST_PP_LIMIT_FOR</b> </div>
<h4>Remarks</h4>
<div>This macro expands by default to <i>256</i>. The end-user can
change this to 512 or 1024 by defining this macro to either value
before including any library headers, as long as the end-user also
defines the <a
href="file:///E:/Programming/VersionControl/modular-boost/libs/preprocessor/doc/ref/limit_mag.html">BOOST_PP_LIMIT_MAG</a>
macro to be equal to or greater than this value.</div>
<h4>Requirements</h4>
<div> <b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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> <br>
<i><EFBFBD> Copyright Paul Mensonides 2002</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

@ -1,34 +1,37 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>BOOST_PP_LIMIT_ITERATION</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_LIMIT_ITERATION</b> macro defines the maximum number of <i>local</i> and <i>file</i> iterations.
</div>
<h4>Usage</h4>
<div class="code">
<b>BOOST_PP_LIMIT_ITERATION</b>
</div>
<h4>Remarks</h4>
<div>
This macro currently expands to <i>256</i>.
</div>
<h4>Requirements</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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>
</br><i><EFBFBD> Copyright Paul Mensonides 2002</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>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<title>BOOST_PP_LIMIT_ITERATION</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;"> The <b>BOOST_PP_LIMIT_ITERATION</b>
macro defines the maximum number of <i>local</i> and <i>file</i>
iterations. </div>
<h4>Usage</h4>
<div class="code"> <b>BOOST_PP_LIMIT_ITERATION</b> </div>
<h4>Remarks</h4>
<div> This macro expands by default to <i>256</i>. The end-user can
change this to 512 or 1024 by defining this macro to either value
before including any library headers, as long as the end-user also
defines the <a href="../ref/limit_mag.html">BOOST_PP_LIMIT_MAG</a>
macro to be equal to or greater than this value. <br>
</div>
<h4>Requirements</h4>
<div> <b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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> <br>
<i><EFBFBD> Copyright Paul Mensonides 2002</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

@ -1,34 +1,33 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>BOOST_PP_LIMIT_MAG</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_LIMIT_MAG</b> macro defines the maximum input and result magnitudes of arithmetic.
</div>
<h4>Usage</h4>
<div class="code">
<b>BOOST_PP_LIMIT_MAG</b>
</div>
<h4>Remarks</h4>
<div>
This macro currently expands to <i>256</i>.
</div>
<h4>Requirements</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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>
</br><i><EFBFBD> Copyright Paul Mensonides 2002</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>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<title>BOOST_PP_LIMIT_MAG</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;"> The <b>BOOST_PP_LIMIT_MAG</b> macro
defines the maximum input and result magnitudes of arithmetic. </div>
<h4>Usage</h4>
<div class="code"> <b>BOOST_PP_LIMIT_MAG</b> </div>
<h4>Remarks</h4>
<div> This macro expands by default to <i>256</i>. The end-user can
change this to 512 or 1024 by defining this macro to either value
before including any library headers.</div>
<h4>Requirements</h4>
<div> <b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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> <br>
<i><EFBFBD> Copyright Paul Mensonides 2002</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

@ -1,39 +1,53 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
<meta content="text/html; charset=windows-1252"
http-equiv="content-type">
<title>BOOST_PP_LIMIT_REPEAT</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;"> The <b>BOOST_PP_LIMIT_REPEAT</b> macro
defines the maximum number of repetitions supported by each <b>BOOST_PP_REPEAT</b>
dimension. </div>
<div style="margin-left: 0px;"> The <b>BOOST_PP_LIMIT_REPEAT</b>
macro defines the maximum number of repetitions supported by each
<b>BOOST_PP_REPEAT</b> dimension. </div>
<h4>Usage</h4>
<div class="code"> <b>BOOST_PP_LIMIT_REPEAT</b> </div>
<h4>Remarks</h4>
<div> This macro current expands to <i>256</i>.<br>
<div>This macro expands by default to <i>256</i>. The end-user can
change this to 512 or 1024 by defining this macro to either value
before including any library headers, as long as the end-user also
defines the <a
href="file:///E:/Programming/VersionControl/modular-boost/libs/preprocessor/doc/ref/limit_mag.html">BOOST_PP_LIMIT_MAG</a>
macro to be equal to or greater than this value. <br>
<br>
NOTE: for the current latest versions of Microsoft's VC++ compiler there
is a nested macro limit of 256. This means in actuality that the number of
repetitions using VC++ is actually less than 256 depending on the
repetition macro being used. For the BOOST_PP_REPEAT macro this limit
appears to be 252 while for the BOOST_PP_ENUM... series of macros this
limit appears to be around 230, before the VC++ compiler gives a "C1009:
compiler limit : macros nested too deeply" error. This is a compiler
limitation of VC++ which may vary depending on the specific repetition
macro being used, and therefore is not a problem the preprocessor library
can solve.</div>
NOTE: for the current latest versions of default preprocessor for
Microsoft's VC++ compiler there is a nested macro limit of 256.
This means in actuality that the number of repetitions using VC++
is actually less than 256 depending on the repetition macro being
used. For the BOOST_PP_REPEAT macro this limit appears to be 252
while for the BOOST_PP_ENUM... series of macros this limit appears
to be around 230, before the VC++ compiler gives a "C1009:
compiler limit : macros nested too deeply" error. This is a
compiler limitation of VC++ which may vary depending on the
specific repetition macro being used, and therefore is not a
problem the preprocessor library can solve. This limitation of the
default preprocessor for VC++ does not exist for the new standard
conforming preprocessor for VC++ in Visual Studio 2019 invoked
with the<code> /Zc:preprocessor</code> switch.<br>
</div>
<h4>Requirements</h4>
<div> <b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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> <br>
<div style="margin-left: 0px;"> <i><EFBFBD> Copyright <a
href="http://www.housemarque.com" target="_top">Housemarque Oy</a>
2002</i> <br>
<i><EFBFBD> Copyright Paul Mensonides 2002</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>
<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

@ -1,41 +1,35 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>BOOST_PP_LIMIT_SEQ</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_LIMIT_SEQ</b> macro defines the maximum <i>seq</i> size
supported by the library.
</div>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_LIMIT_SEQ</b>
</div>
<h4>
Remarks
</h4>
<div>
This macro currently expands to <i>256</i>.
</div>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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>
</br><i><EFBFBD> Copyright Paul Mensonides 2002</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>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<title>BOOST_PP_LIMIT_SEQ</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;"> The <b>BOOST_PP_LIMIT_SEQ</b> macro
defines the maximum <i>seq</i> size supported by the library. </div>
<h4> Usage </h4>
<div class="code"> <b>BOOST_PP_LIMIT_SEQ</b> </div>
<h4> Remarks </h4>
<div>This macro expands by default to 256. The macro actually
expands to the value of the <a href="../ref/limit_mag.html">BOOST_PP_LIMIT_MAG</a>
macro, but can be set to a lower value than BOOST_PP_LIMIT_MAG if
desired, but never to a higher value.<br>
</div>
<h4> Requirements </h4>
<div> <b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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> <br>
<i><EFBFBD> Copyright Paul Mensonides 2002</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

@ -1,33 +1,38 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<title>BOOST_PP_LIMIT_TUPLE</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_LIMIT_TUPLE</b> macro defines the maximum <i>tuple</i> size supported by the library.
</div>
<h4>Usage</h4>
<div class="code">
<b>BOOST_PP_LIMIT_TUPLE</b>
</div>
<h4>Remarks</h4>
<div>
This macro currently expands to <i>64</i>.
</div>
<h4>Requirements</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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>
<br><i><EFBFBD> Copyright Paul Mensonides 2002</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>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;"> The <b>BOOST_PP_LIMIT_TUPLE</b>
macro defines the maximum <i>tuple/array</i> size supported by
the library. </div>
<h4>Usage</h4>
<div class="code"> <b>BOOST_PP_LIMIT_TUPLE</b> </div>
<h4>Remarks</h4>
<div> This macro expands by default to <i>64</i>. The end-user can
change this to 128 or 256 by defining this macro to either value
before including any library headers. If the end-user changes the
value of the macro the <a href="../ref/limit_variadic.html">BOOST_PP_LIMIT_VARIADIC</a>
macro is changed to the same value unless the end-user has changed
BOOST_PP_LIMIT_VARIADIC to a higher value.<br>
</div>
<h4>Requirements</h4>
<div> <b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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> <br>
<i><EFBFBD> Copyright Paul Mensonides 2002</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

@ -1,24 +1,35 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>BOOST_PP_LIMIT_VARIADIC</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;"> The <b>BOOST_PP_LIMIT_VARIADIC</b> macro
defines the maximum <i>variadic data</i> size&nbsp;supported by the library. </div>
<h4>Usage</h4>
<div class="code"> <b>BOOST_PP_LIMIT_VARIADIC</b> </div>
<h4>Remarks</h4>
<div> This macro currently expands to <i>64</i>. </div>
<h4>Requirements</h4>
<div> <b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</div>
<hr size="1">
<div style="margin-left: 0px;"> <i></i><i><EFBFBD> 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>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<title>BOOST_PP_LIMIT_VARIADIC</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;"> The <b>BOOST_PP_LIMIT_VARIADIC</b>
macro
defines the maximum <i>variadic data</i> size&nbsp;supported by
the library. </div>
<h4>Usage</h4>
<div class="code"> <b>BOOST_PP_LIMIT_VARIADIC</b> </div>
<h4>Remarks</h4>
<div>This macro expands by default to <i>64</i>. The end-user can
change this to 128 or 256 by defining this macro to either value
before including any library headers. This value can never be less
than the value of <a href="../ref/limit_tuple.html">BOOST_PP_LIMIT_TUPLE</a>.<br>
</div>
<h4>Requirements</h4>
<div> <b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</div>
<hr size="1">
<div style="margin-left: 0px;"> <i></i><i><EFBFBD> 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

@ -1,34 +1,35 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>BOOST_PP_LIMIT_WHILE</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_LIMIT_WHILE</b> macro defines the maximum number of <b>BOOST_PP_WHILE</b> iterations.
</div>
<h4>Usage</h4>
<div class="code">
<b>BOOST_PP_LIMIT_WHILE</b>
</div>
<h4>Remarks</h4>
<div>
This macro currently expands to <i>256</i>.
</div>
<h4>Requirements</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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>
</br><i><EFBFBD> Copyright Paul Mensonides 2002</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>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<title>BOOST_PP_LIMIT_WHILE</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;"> The <b>BOOST_PP_LIMIT_WHILE</b>
macro defines the maximum number of <b>BOOST_PP_WHILE</b>
iterations. </div>
<h4>Usage</h4>
<div class="code"> <b>BOOST_PP_LIMIT_WHILE</b> </div>
<h4>Remarks</h4>
<div>This macro expands by default to <i>256</i>. The macro
actually expands to the value of the <a
href="file:///E:/Programming/VersionControl/modular-boost/libs/preprocessor/doc/ref/limit_mag.html">BOOST_PP_LIMIT_MAG</a>
macro and can not be changed.</div>
<h4>Requirements</h4>
<div> <b>Header:</b> &nbsp;<a href="../headers/config/limits.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</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> <br>
<i><EFBFBD> Copyright Paul Mensonides 2002</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

@ -16,10 +16,12 @@
<li><a href="topics/evaluated_slots.html">evaluated slots</a></li>
<li><a href="topics/variadic_macros.html">variadic macros</a></li>
<li><a href="topics/emptiness.html">emptiness</a></li>
<li><a href="topics/limitations.html">limitations</a></li>
</ul>
<!--
<EFBFBD> Copyright Housemarque Oy 2002
<EFBFBD> Copyright Paul Mensonides 2002
<EFBFBD> Copyright Edward Diener 2020
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)

284
doc/topics/limitations.html Normal file
View File

@ -0,0 +1,284 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="content-type">
<title>limitations.html</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
<style>
u { font-weight: normal; text-decoration: none; }
</style>
</head>
<body>
<h3>Preprocessor library limitations</h3>
<blockquote>
<p>The Boost preprocessor library has always had certain specific
limitations, which are specifically explained in other areas of
this documentation and are implemented as object-like macros in
the header file config/limits.hpp. These limitations largely
detail the maximum number for certain features in the library.
These maximums have been chosen in order to accommodate the
large number of compilers and their preprocessors which the
library supports, in order to provide a lowest common set of
limits with which the vast majority of these compilers can work
successfully. This reflects the situation that the C/C++
standard rarely specifies preprocessor limitations for compilers
but rather allows each compiler to choose whatever limitations
it deems necessary in its preprocessor. While this allows
individual compilers to largely choose what preprocessor
limitations it deems necessary, it makes it more difficult for a
preprocessor library like this one to work with a large number
of preprocessors across a number of operating system platforms.
The difficulty of this situation means that this Boost
preprocessor library has chosen fairly conservative limitations.<br>
</p>
<p>In fact the limitation macros, although indeed existing, have
never previously been used internally in the preprocessor
library code. Instead while the limitation macros do indeed
exist, the library has internally used fixed numbers equivalent
to what these macros represent. This historical situation most
probably reflects the fact that the library did not want the
end-user's possibly changing the limitations, by redefining the
macros in config/limits.hpp, to change how the library works and
therefore cause problems in using the library.<br>
</p>
<p>This situation has now changed and a number of the limitation
macros specified in config/limits.hpp are now used internally in
the library code. This topic is therefore about how an end-user
can change the limitations of the library.<br>
</p>
</blockquote>
<h4>Type of limitations</h4>
<blockquote>
<p>The type of limitations in the Boost preprocessor library can
be divided as:<br>
</p>
<ul>
<li>Numbers</li>
<li>Sizes</li>
<li>Loops</li>
<li>Iterations</li>
</ul>
The library has support for numbers. This supports basic
arithmetic, comparisons, and logical operations. This support is
documented by the macro BOOST_PP_LIMIT_MAG, where 'MAG' is short
for "MAGNITUDE'. The current fixed maximum value is 256. This
means that the library supports numerical operations in the range
between 0 and 256.<br>
<br>
The library has support for the maximum sizes of higher level
types. These types are arrays, lists, seqs, tuples, and variadic
data. By sizes for these higher level constructs it is meant the
maximum number of elements of which a higher level construct can
consist. For arrays and tuples this value is documented by the
macro BOOST_PP_LIMIT_TUPLE while for variadic data this value is
documented by the macro BOOST_PP_LIMIT_VARIADIC. In both these
cases the current fixed maximum value is 64. For seqs the value is
documented by the macro BOOST_PP_LIMIT_SEQ, whose current fixed
value is 256. For lists there has never been a limitation macro
but in actual fact the limitation on the maximum number of list
elements is defined by the maximum number given above for
BOOST_PP_LIMIT_MAG. So a list, like a seq, has a default maximum
of 256 elements. The reason that the maximum number of elements
for arrays, tuples, and variadic data is 64 while for seqs and
lists it is the much larger value of 256 is because the
implementation of the former constructs often involves passing the
likewise number as parameters to internal macros and a number of
compilers have placed limitations on the number of parameters a
macro can have; so the much safer 64 was chosen so as to be able
to work with these compilers.<br>
<br>
The looping constructs consist of the control structure
BOOST_PP_WHILE and the repetition constructs BOOST_PP_FOR and
BOOST_PP_REPEAT. Each of these have a limitation macro, all
currently set to 256. This means that the loop can run at maximum
256 times. The corresponding limitation macros are
BOOST_PP_LIMIT_WHILE, BOOST_PP_LIMIT_FOR, and
BOOST_PP_LIMIT_REPEAT.<br>
<br>
Iteration constructs consist of local iteration and file iteration
constructs.The specifics are more fully discussed in their own
topics. The corresponding macro is BOOST_PP_LIMIT_ITERATION whose
value is 256.<br>
</blockquote>
<h4> Limitation dependencies</h4>
<blockquote>A number of the limitations are actually dependent on
other limitations. These are:<br>
<ul>
<li>BOOST_PP_LIMIT_MAG depends on BOOST_PP_LIMIT_WHILE. All the
arithmetic macros except for BOOST_PP_INC and BOOST_PP_DEC
depend on looping using BOOST_PP_WHILE. Similarly all the
comparison macros except for BOOST_PP_EQUAL and
BOOST_PP_NOT_EQUAL depend on BOOST_PP_WHILE. So whatever is
the value for BOOST_PP_LIMIT_MAG is also the value for
BOOST_PP_LIMIT_WHILE.</li>
<li>BOOST_PP_LIMIT_TUPLE depends on BOOST_PP_LIMIT_VARIADIC when
variadic macros are supported, since in that case array/tuple
functionality often ends up calling variadic data
functionality. So while BOOST_PP_LIMIT_TUPLE can be smaller
than BOOST_PP_LIMIT_VARIADIC it can never be larger.<br>
</li>
<li>BOOST_PP_LIMIT_SEQ depends on BOOST_PP_LIMIT_MAG since the
total size of a seq must be at most the largest number. So
while BOOST_PP_LIMIT_SEQ could be smaller than
BOOST_PP_LIMIT_MAG it can never be larger.</li>
<li>BOOST_PP_LIMIT_FOR, BOOST_PP_LIMIT_REPEAT, and
BOOST_PP_LIMIT_ITERATION all depend on BOOST_PP_LIMIT_MAG.
While any of these values could be smaller than
BOOST_PP_LIMIT_MAG none of them can be larger.</li>
</ul>
</blockquote>
<h4>Changing the limitations</h4>
<blockquote>
<p>Limitations can be changed by the end-user defining a
limitation macro prior to including preprocessor library header
files. This can be done either in a source file or as part of a
compiler command line.<br>
</p>
</blockquote>
<blockquote>
<p>Before specifying which limitations can be changed a number of
items need to be emphasized:<br>
</p>
<ul>
<li>The limitations which can be changed can only be done for
C++ standard conforming preprocessors. You can use the macro
BOOST_PP_IS_STANDARD, invoking it as BOOST_PP_IS_STANDARD(),
to determine if your compiler has a C++ standard conforming
preprocessor. Almost all major compilers, including gcc and
clang, have C++ standard conforming preprocessors. Most
notably the default Visual C++ compiler is not a C++ standard
conforming preprocessor, but the new preprocessor for Visual
C++, available in Visual Studio 2019 and above, is a C++
standard conforming preprocessor. If you change a limitation
for a compiler that is not a C++ standard conforming
preprocessor the change is simply ignored and no preprocessor
error will occur.<br>
</li>
<li>WARNING ! WARNING ! WARNING ! Increasing limitations may
mean that preprocessors may fail because the compiler itself
can not handle the increase in the limitations. This may occur
because the compiler has an internal limit on the number of
parameters that can be passed to a macro, the number of nested
macro invocations, or even the amount of memory needed for the
preprocessor to expand a macro.</li>
<li>Except for possibly first including the preprocessor header
boost/preprocessor/config/config.hpp, changing any limitation
must be done before including Boost preprocessor headers in a
TU ( translation unit ) to work properly. Attempting to change
a limitation after including Boost preprocessor headers will
at worst lead to preprocessor errors and at best lead to UB (
undefined behavior ).</li>
<li>Limitations can only be changed to specific values as given
below. Attempting to change limitations to other than the
specific values will lead to the change being ignored or, if
incorrectly done after including Boost preprocessor headers, a
preprocessor error.</li>
</ul>
All the limitations whose default value is 256 can be changed to
either 512 or 1024, except for BOOST_PP_LIMIT_WHILE which can not
be changed.<br>
The two limitations whose default value is 64 can be changed to
128 or 256.<br>
<br>
For the individual limitations:<br>
<ul>
<li>BOOST_PP_LIMIT_MAG : When you change this limitation the
value of BOOST_PP_LIMIT_WHILE also changes so that it is equal
to BOOST_PP_LIMIT_MAG. This is because numerical computations
depend on the BOOST_PP_WHILE loop, and therefore
BOOST_PP_LIMIT_WHILE itself can not be changed. Also when you
change the BOOST_PP_LIMIT_MAG limitation the value of
BOOST_PP_LIMIT_SEQ, if it has not been also changed to be less
than BOOST_PP_LIMIT_MAG, is also changed to the value of
BOOST_PP_LIMIT_MAG. This is so that seqs, like lists, will
normally have the same maximum number of elements, as defined
by BOOST_PP_LIMIT_MAG, unless you decide otherwise and change
the BOOST_PP_LIMIT_SEQ&nbsp; yourself.<br>
</li>
<li>BOOST_PP_LIMIT_TUPLE: When you change this limitation the
value of BOOST_PP_LIMIT_VARIADIC also changes so that it is at
least equal to BOOST_PP_LIMIT_TUPLE if the value of
BOOST_PP_LIMIT_VARIADIC has not also been changed to be
greater than BOOST_PP_LIMIT_TUPLE. This is because
tuples/arrays depend on variadic functionality when variadic
macros are supported..</li>
<li>BOOST_PP_LIMIT_SEQ, BOOST_PP_LIMIT_FOR,
BOOST_PP_LIMIT_REPEAT, BOOST_PP_LIMIT_ITERATION: If you try to
set any of these values greater than the BOOST_PP_LIMIT_MAG
value, the particular limitation is set to equal the value of
BOOST_PP_LIMIT_MAG. This is because all of these limits depend
on the range of numerical values.</li>
</ul>
</blockquote>
<h4>Other considerations</h4>
<blockquote>
<p>There is no necessity to change any limitation if you are happy
with its default value. However if you decide to increase a
limitation you should be aware that doing so can affect both the
amount of memory used by the preprocessor and the speed in which
preprocessing is accomplished. In the first case some
preprocessors have been known to run out of memory if a
limitation value is increased, even though this should really
never happen in modern computer systems. In the latter case
preprocessing might become so slow that trying to use the
library with some increased limitation, and have your
preprocessing finish in some reasonable amount of time, becomes
impossible. The latter can occur when you are using lists or
seqs and while cycling through a large number of elements you
are also doing time consuming operations on each element value
which generates further macro looping. Nearly all arithmetic and
comparison operations involve further macro looping.<br>
</p>
<p>For lists and seqs there is functionality which uses the
BOOST_PP_FOR macro. If the maximum size for lists and seqs is
increased, by using BOOST_PP_LIMIT_MAG macro, you may also need
to define BOOST_PP_LIMIT_FOR to increase the maximum number of
'for' loops in order to cycle through all lists or seqs using
this functionality.<br>
</p>
<p>The BOOST_PP_WHILE construct is used internally for looping by
nearly all arithmetic and comparison macros as well as
internally by a number of other macros in the library which loop
through elements. While the construct can be called from within
an already running BOOST_PP_WHILE loop, it is possible to run
out of BOOST_PP_WHILE loops when this happens. In order to solve
this problem you can specify a BOOST_PP_LIMIT_MAG which is
larger than the maximum number you will ordinarily use. This
will give you twice the number of BOOST_PP_WHILE loops and will
keep you from running out of loops if you have to do arithmetic
computations while cycling through lists and seqs and the number
of lists and/or seqs you cycle through is anywhere near your
original&nbsp; maximum.<br>
</p>
</blockquote>
<blockquote>
<ul>
</ul>
</blockquote>
<blockquote> </blockquote>
<b>See</b> <b>Also</b><br>
<ul>
<li><a href="../ref/is_standard.html">BOOST_PP_IS_STANDARD</a><br>
</li>
<li><a href="../ref/limit_mag.html">BOOST_PP_LIMIT_MAG</a></li>
<li><a href="../ref/limit_tuple.html">BOOST_PP_LIMIT_TUPLE</a></li>
<li><a href="../ref/limit_variadic.html">BOOST_PP_LIMIT_VARIADIC</a></li>
<li><a href="../ref/limit_seq.html">BOOST_PP_LIMIT_SEQ</a></li>
<li><a href="../ref/limit_while.html">BOOST_PP_LIMIT_WHILE</a></li>
<li><a href="../ref/limit_for.html">BOOST_PP_LIMIT_FOR</a></li>
<li><a href="../ref/limit_repeat.html">BOOST_PP_LIMIT_REPEAT</a></li>
<li><a href="../ref/limit_iteration.html">BOOST_PP_LIMIT_ITERATION</a><br>
</li>
</ul>
<hr size="1">
<div style="margin-left: 0px;"> <i><EFBFBD> Copyright Edward Diener 2020</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>