
Hans Larsen wrote:
or, putting the code as a parameter to the macro:
BOOST_SCOPE_EXIT( (hello)(world), { // ... } );
As Andrey pointed out, any comma inside the block would break your code: BOOST_SCOPE_EXIT( (hello)(world), { a, b; } ) GNU g++ would report something like: macro "BOOST_SCOPE_EXIT" passed 3 arguments, but takes just 2. You could either BOOST_SCOPE_EXIT( (hello)(world), ({ a, b; }) ) or BOOST_SCOPE_EXIT( (hello)(world), { (a, b;) } ) but I don't know how to deal with these strange constructs.
What about using a static variable instead? It has no significant differences with a global variable.
// User code //BOOST_SCOPE_EXIT( (hello)(world) ) // line 1 /* Expands to: */ static struct args_line1_t { std::string &hello, &world; } args_line1 = { hello, world };
It's incorrect, args_line1 is initialized only once and never changes. It always points to hello and world existed when a program reached this point the first time.
Is the use of __LINE__ correct? I can't think of a way to break it, which in no way means it's perfect... It's correct unless you put more than one scope(exit) in one line.
Why do you need that library and is it absolutely necessary? Because I saw so much exception unaware code. I don't see any case of valid exceptions in the use of this library. Sorry, I don't understand this statement.
Simply that BOOST_SCOPE_EXIT( ... ) { throw XXX; }
Is invalid by definition. Indeed, it's almost always invalid. I would never throw from inside of a scope(exit) block. But I was talking about exception unware code in pre scope(exit) era. Developers often don't cleanup resources if an exception is thrown. The library would help here.
If you're talking about the fact that you need to get an unknown typename into a local-class (how to know that hello and world are std::string, for example), then the typeof dependency is well justified. Otherwise, I still fail to see why it is needed.
Yes, typeof is there to bring types of variables into the class. -- Alexander Nasonov http://nasonov.blogspot.com Government does not tax to get the money it needs; government always finds a need for the money it gets. -- Ronald Reagan -- This quote is generated by: /usr/pkg/bin/curl -L http://tinyurl.com/veusy \ | sed -e 's/^document\.write(.//' -e 's/.);$/ --/' \ -e 's/<[^>]*>//g' -e 's/^More quotes from //' \ | fmt | tee ~/.signature-quote