
On Thu, Feb 17, 2011 at 7:02 PM, Emil Dotchevski <emildotchevski@gmail.com> wrote:
On Thu, Feb 17, 2011 at 12:51 PM, Dave Abrahams <dave@boostpro.com> wrote:
On Thu, Feb 17, 2011 at 2:55 PM, Nevin Liber <nevin@eviloverlord.com> wrote:
On 17 February 2011 11:45, Dave Abrahams <dave@boostpro.com> wrote:
On Thu, Feb 17, 2011 at 11:36 AM, Alexander Fokin <apfokin@gmail.com> wrote:
I believe it's not that simple.
As I remember, throw() means the same thing as nothrow only in MSVC. For example, under GCC you'll have to use __attribute__((nothrow)).
Correct me if I'm wrong.
You're right. In general, throw() has runtime semantics and can produce runtime overhead in the form of increased executable size and occasionally reduced speed. noexcept has only compile-time semantics.
noexcept has runtime semantics as well, doesn't it? If you are in a function declared noexcept(true) and an exception tries to escape, std::terminate is called.
Grrr! Right, I forgot they added that behavior against my advice.
Do I understand correctly that they replaced the lame throw() standard behavior, to call unexpected() if an exception attempts to propagate out of the function, with calling std::terminate() instead? Am I missing something, isn't this equally lame?
Don't get me started :-( -- Dave Abrahams BoostPro Computing http://www.boostpro.com