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