
I've implemented a new macro, BOOST_PARAMETER_FUN2, that uses approach #3 mentioned in <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm>. For example, the BGL implementation of Dijkstra's algorithm <http://www.boost.org/libs/graph/doc/dijkstra_shortest_paths.html> can now be declared as: struct dijkstra_parameters : parameter::parameters<...> { } BOOST_PARAMETER_FUN2( void , dijkstra_shortest_paths , (0)(0)(1)(1)(0)(0)(0)(0)(0)(0)(1)(1) , 2 , dijkstra_parameters ) { ... } Each element in the Boost.Preprocessor sequence corresponds to a positional argument. If the element is set to 1, the argument is bound to an "out" parameter; otherwise it is bound to an "in" parameter. The size of the sequence is, of course, the total number of arguments accepted by the function. The macro argument following the sequence is the number of parameters required by the function. All other macro arguments are the same as the corresponding ones in BOOST_PARAMETER_FUN. The macro and example program are available in the "_Examples" directory of the Boost Vault, filename "boost_parameter_fun2_example.zip". GCC 3.4.2 (MinGW) compiles it cleanly, but MSVC 7.1 emits several instances of "warning C4003: not enough actual parameters for macro 'BOOST_PP_SEQ_SIZE_I'". (I know I shouldn't be passing BOOST_PP_EMPTY() to it, but replacing it with BOOST_PP_SEQ_NIL generates errors from both compilers. Fixes appreciated! Cromwell D. Enage __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com