]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | [/ |
2 | (C) Copyright Edward Diener 2011-2015 | |
3 | Distributed under the Boost Software License, Version 1.0. | |
4 | (See accompanying file LICENSE_1_0.txt or copy at | |
5 | http://www.boost.org/LICENSE_1_0.txt). | |
6 | ] | |
7 | ||
8 | [section:vmd_vmacros Using variadic macros] | |
9 | ||
10 | Variadic macros, as specified by C++11, is a feature taken from the C99 | |
11 | specification. They are macros which take a final parameter denoted as | |
12 | '...' which represents one or more final arguments to the macro as a | |
13 | series of comma-separated tokens. In the macro expansion a special | |
14 | keyword of '\_\_VA\_ARGS\_\_' represents the comma-separated tokens. This | |
15 | information when passed to a variadic macro I call 'variadic macro data', | |
16 | which gives its name to this library. The more general term 'variadic data' | |
17 | is used in this documentation to specify data passed to a macro which can | |
18 | contain any number of macro tokens as a single macro parameter, such as is | |
19 | found in Boost PP data types. | |
20 | ||
21 | [heading Boost support] | |
22 | ||
23 | The Boost PP library has support for variadic macros and uses its | |
24 | own criteria to determine if a particular compiler has that support. | |
25 | Boost PP defines or uses the macro BOOST_PP_VARIADICS to denote whether | |
26 | the compiler being used supports variadic macros. When BOOST_PP_VARIADICS | |
27 | is set to 1 the compiler supports variadic macros, otherwise when | |
28 | BOOST_PP_VARIADICS is set to 0 the compiler does not support variadic macros. | |
29 | If a user of Boost PP sets this value, Boost PP uses the value the end-user | |
30 | sets, otherwise Boost PP defines the value of BOOST_PP_VARIADICS based on its | |
31 | own analysis of the compiler being used. This macro can also be checked to | |
32 | determine if a compiler has support for variadic macros. | |
33 | ||
34 | [heading Determining variadic macro support] | |
35 | ||
36 | The VMD library automatically determines whether variadic macro support | |
37 | is enabled for a particular compiler by also using the same BOOST_PP_VARIADICS | |
38 | macro from Boost PP. The end-user of VMD can also manually | |
39 | set the macro BOOST_PP_VARIADICS to turn on or off compiler support for | |
40 | variadic macros in the VMD library. When BOOST_PP_VARIADICS is set to 0 | |
41 | variadic macros are not supported in the VMD library, otherwise when | |
42 | BOOST_PP_VARIADICS is set to non-zero they are supported in the VMD library. | |
43 | This same macro can be used to determine if VMD supports variadic macros for a | |
44 | particular compiler. | |
45 | ||
46 | Since this library depends on variadic macro support, if BOOST_PP_VARIADICS | |
47 | is set to 0, using any of the macros in VMD will lead to a compiler error | |
48 | since the macro will not be defined. However just including any of the header | |
49 | files in VMD, even with no variadic macro support for the compiler, will not | |
50 | lead to any compiler errors. | |
51 | ||
52 | [endsect] |