Boost logo

Boost :

Subject: Re: [boost] gcc4.3 warning for multiple scope_exits
From: Alexander Nasonov (alnsn_at_[hidden])
Date: 2009-07-14 06:48:37


Kim Barrett <kab.conundrums <at> verizon.net> writes:

>
> Boost.ScopeExit uses a tricky bit of code (from Steven Watanabe) to allow a
> macro expansion to contain code which will declare a variable exactly once,
> regardless of how many times the macro is used in a given
> scope. Unfortunately, gcc4.3 -Wall generates a warning for this code in the
> second and later uses of the macro in the same scope. The warning is
>
> comparisons like X<=Y<=Z do not have their mathematical meaning
>
> It is complaining about a statement that gets parsed as
>
> identifier < 0 > variable;
>
> Valid code, and correct in this particular case, but the warning is there
> never the less.

Hi Kim,

I don't understand how it works for the second use within one scope:

boost::scope_exit::aux::holder<
  boost::scope_exit::aux::declare<
    sizeof(boost_scope_exit_args)
>::apply<0>::apply_value
> boost_scope_exit_args;

If sizeof(boost_scope_exit_args) is equal to sizeof(declared),
the resulting type would be holder<(0<0>::apply_value)>. But I don't
see a global variable apply_value in your patch.

BTW, I modified Steven's code and introduced a bug because
sizeof(declare<sizeof(undeclared)>::apply<0>) does not necessarily
equal to sizeof(declared).

Alex


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk