$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Alexander Nasonov (alnsn_at_[hidden])
Date: 2007-08-21 07:06:17
Steven Watanabe <steven <at> providere-consulting.com> writes:
> 
> AMDG
> 
> The local structs are not essential.  You can
> use tuples.
I like this idea.
> I too would definitely like to see something like
> 
> int main() {
> 
> int i = 0;
> 
> BOOST_LOCAL_FUNCTION(f, (i), (int, v)) {
>     i = v;
> } BOOST_LOCAL_FUNCTION_END;
> 
> f(2); // i = 2
> 
> }
How about this?
int BOOST_LOCAL_FUNCTION( (v) ) (int i)
{
    return v = i;
} BOOST_LOCAL_FUNCTION_END
You can think of it as if BOOST_LOCAL_FUNCTION macro invocation
has been expanded to local function name.
I'm not sure that it's possible in typeof emulation, though :(
Here is how this construction looks after preprocessing:
// Line 1.
int
(*sig_1)();
typedef typeof(v) typeof_v_1;
typedef boost::tuple<typeof_v_1&> tuple_t_1;
tuple_t_1 tuple_1(v);
{ // __LINE__ suffix can be omitted inside this block.
    typedef typeof(sig_1()) result_t;
    typedef tuple_t_1 tuple_t;
    tuple_t& tuple = tuple_1;
    struct scope_exit_body_t {
        typeof_v_1& v;
        scope_exit_body_t(tuple_t& tuple)
          : v(tuple.get<0>())
        {}
        result_t
        // Lines 2-5.
        operator()(int i) const
        {
            return i = v;
        }
        // Line 6.
    };
    typedef typeof(&scope_exit_body_t::operator()) native_typeof_only;
}
> In Christ,
> Steven Watanabe
-- Alexander