BOOST_SCOPE_EXIT doesn't detect argument types

I have the following code: typedef std::vector<boost::intrusive_ptr<node> > children_t; children_t children = group.children_.value(); ⋮ children.push_back(*n); bool succeeded = false; BOOST_SCOPE_EXIT((&succeeded)(&children)) { if (!succeeded) { children.pop_back(); } } BOOST_SCOPE_EXIT_END This is yielding compiler errors like this: 193: error: ‘boost_se_params_t_193::boost_se_param_t_0_193’ is not a type 193: error: ‘boost_se_params_t_193::boost_se_param_t_1_193’ is not a type The block of code emitted by the preprocessor starts like this: typedef void (*boost_se_tag_0_193)(int &succeeded); typedef void (*boost_se_tag_1_193)(int &children); … which leads me to conclude that, for some reason, BOOST_SCOPE_EXIT isn't picking up the correct types for its arguments. Has anyone seen this sort of thing before? Is there something I can do to play more nicely with BOOST_SCOPE_EXIT? -- Braden McDaniel <braden@endoframe.com>

On Feb 11, 2010, at 1:00 AM, Braden McDaniel wrote:
I have the following code:
[...] This is yielding compiler errors like this:
193: error: ‘boost_se_params_t_193::boost_se_param_t_0_193’ is not a type 193: error: ‘boost_se_params_t_193::boost_se_param_t_1_193’ is not a type
[...] Has anyone seen this sort of thing before? Is there something I can do to play more nicely with BOOST_SCOPE_EXIT?
You don't mention which compiler and don't show the full code context, but based on those error messages I'm guessing that you are using gcc and that this use of BOOST_SCOPE_EXIT is within a template? Try BOOST_SCOPE_EXIT_TPL.

On Thu, 2010-02-11 at 01:44 -0500, Kim Barrett wrote:
On Feb 11, 2010, at 1:00 AM, Braden McDaniel wrote:
I have the following code:
[...] This is yielding compiler errors like this:
193: error: ‘boost_se_params_t_193::boost_se_param_t_0_193’ is not a type 193: error: ‘boost_se_params_t_193::boost_se_param_t_1_193’ is not a type
[...] Has anyone seen this sort of thing before? Is there something I can do to play more nicely with BOOST_SCOPE_EXIT?
You don't mention which compiler and don't show the full code context, but based on those error messages I'm guessing that you are using gcc and that this use of BOOST_SCOPE_EXIT is within a template? Try BOOST_SCOPE_EXIT_TPL.
Good guess. Thanks! -- Braden McDaniel <braden@endoframe.com>
participants (2)
-
Braden McDaniel
-
Kim Barrett