
AMDG Alexander Nasonov <alnsn <at> yandex.ru> writes:
int i; void BOOST_LOCAL_FUNCTION(i) char c) { } ...
Note missing '(' in the first line.
Hmmm, what about adding another parenthesis before? void (BOOST_LOCAL_FUNCTION(i) char c) I don't really like that either... How about allowing either: void BOOST_LOCAL_FUNCTION(BOOST_LOCAL_FUNCTION_BIND(i), char c) or void BOOST_LOCAL_FUNCTION(char c) depending on whether binding is needed? I haven't thought about it too hard, but I think it should be possible to handle both. void BOOST_LOCAL_FUNCTION(BOOST_LOCAL_FUNCTION_BIND((ref i)), char c) could expand to void // BOOST_LOCAL_FUNCTION result_type_getter(); typedef ... result_type; void* bound_args = 0; typedef struct { static result_type body //BOOST_LOCAL_FUNCTION_BIND (); } ignore; boost::tuple<int&> bound_args_impl; bound_args = &bound_args typedef struct { static result_type body(int&, end_of_bound_args_t, , char c) { // function body goes here } //BOOST_LOCAL_FUNCTION_DEF } impl; typedef BOOST_TYPEOF(impl::body) function_type; // now we can use TMP to figure out whether there // are any bound args, and if so what the tuple<...> // type is. In Christ, Steven Watanabe