| |
| [/ 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] |
| |