6c2a7f1f4d
[SVN r79272]
69 lines
3.4 KiB
Plaintext
69 lines
3.4 KiB
Plaintext
|
|
[/ Copyright (C) 2009-2012 Lorenzo Caminiti ]
|
|
[/ Distributed under the Boost Software License, Version 1.0 ]
|
|
[/ (see accompanying file LICENSE_1_0.txt or a copy at ]
|
|
[/ http://www.boost.org/LICENSE_1_0.txt) ]
|
|
[/ Home at http://www.boost.org/libs/local_function ]
|
|
|
|
[section:no_variadic_macros Annex: No Variadic Macros]
|
|
|
|
This section illustrates an alternative syntax for compilers without variadic macro support.
|
|
|
|
[heading Sequence Syntax]
|
|
|
|
Most modern compilers support [@http://en.wikipedia.org/wiki/Variadic_macro variaid macros] (notably, these include GCC, MSVC, and all __CXX11__ compilers).
|
|
However, in the rare case that programmers need to use this library on a compiler without variadic macros, this library also allows to specify its macro parameters using a __Boost_Preprocessor__ sequence where tokens are separated by round parenthesis `()`:
|
|
|
|
(token1) (token2) ... // All compilers.
|
|
|
|
Instead of the comma-separated list that we have seen so far which requires variadic macros:
|
|
|
|
token1, token2, ... // Only compilers with varidic macros.
|
|
|
|
For example, the following syntax is accepted on all compilers with and without variadic macros (see also [@../../test/add_seq.cpp =add_seq.cpp=]):
|
|
|
|
[add_seq]
|
|
|
|
However, on compilers with variadic macros the comma-separated syntax we have seen so far is preferred because more readable (see also [@../../test/add.cpp =add.cpp=]):
|
|
|
|
[add]
|
|
|
|
Note that the same macros accept both syntaxes on compilers with variadic macros and only the sequence syntax on compilers without variadic macros.
|
|
Finally, an empty local function parameter list is always specified using `void` on compilers with and without variadic macros:
|
|
|
|
[ten_void]
|
|
|
|
[heading Examples]
|
|
|
|
For reference, the following is a list of most of the examples presented in this documentation reprogrammed using the sequence syntax instead of the comma-separated syntax (in alphabetic order):
|
|
|
|
[table
|
|
[ [Files] ]
|
|
[ [[@../../test/add_classifiers_seq.cpp =add_classifiers_seq.cpp=]] ]
|
|
[ [[@../../test/add_default_seq.cpp =add_default_seq.cpp=]] ]
|
|
[ [[@../../test/add_except_seq.cpp =add_except_seq.cpp=]] ]
|
|
[ [[@../../test/add_inline_seq.cpp =add_inline_seq.cpp=]] ]
|
|
[ [[@../../test/add_params_only_seq.cpp =add_params_only_seq.cpp=]] ]
|
|
[ [[@../../test/add_template_seq.cpp =add_template_seq.cpp=]] ]
|
|
[ [[@../../test/add_this_seq.cpp =add_this_seq.cpp=]] ]
|
|
[ [[@../../test/add_typed_seq.cpp =add_typed_seq.cpp=]] ]
|
|
[ [[@../../test/add_with_default_seq.cpp =add_with_default_seq.cpp=]] ]
|
|
[ [[@../../test/all_decl_seq.cpp =all_decl_seq.cpp=]] ]
|
|
[ [[@../../test/factorial_seq.cpp =factorial_seq.cpp=]] ]
|
|
[ [[@../../test/macro_commas_seq.cpp =macro_commas_seq.cpp=]] ]
|
|
[ [[@../../test/nesting_seq.cpp =nesting_seq.cpp=]] ]
|
|
[ [[@../../test/overload_seq.cpp =overload_seq.cpp=]] ]
|
|
[ [[@../../test/return_assign_seq.cpp =return_assign_seq.cpp=]] ]
|
|
[ [[@../../test/return_derivative_seq.cpp =return_derivative_seq.cpp=]] ]
|
|
[ [[@../../test/return_inc_seq.cpp =return_inc_seq.cpp=]] ]
|
|
[ [[@../../test/return_setget_seq.cpp =return_setget_seq.cpp=]] ]
|
|
[ [[@../../test/return_this_seq.cpp =return_this_seq.cpp=]] ]
|
|
[ [[@../../test/same_line_seq.cpp =same_line_seq.cpp=]] ]
|
|
[ [[@../../test/transform_seq.cpp =transform_seq.cpp=]] ]
|
|
[ [[@../../test/typeof_seq.cpp =typeof_seq.cpp=]] ]
|
|
[ [[@../../test/typeof_template_seq.cpp =typeof_template_seq.cpp=]] ]
|
|
]
|
|
|
|
[endsect]
|
|
|