Boost logo

Boost :

Subject: Re: [boost] Improving the assignment operators of various Boosttypes
From: Gevorg Voskanyan (v_gevorg_at_[hidden])
Date: 2008-09-11 13:59:23


David Abrahams wrote:

> on Thu Sep 11 2008, Gevorg Voskanyan wrote:
 
[snip]

> > AFAIU, a swapping assignment operator taking the parameter by const ref
> adheres
> > to the strong exception safety guarantee, whereas the one taking the parameter
> > by value fulfills the nothrow guarantee. Not sure how practical and/or
> relevant
> > the difference in this context is, though.
> >
> > Is my observation above correct?
>
> Well, technically, yeah... although the expression that does the
> assignment can still throw, so I don't think it makes much difference to
> say that it's nothrow. In other words, if I give you
>
> f(std::string); // nothrow
> g(std::string&); // strong guarantee
>
> For all practical purposes, you know that f and g have equivalent
> exception behavior because std::string's copy ctor can throw.

True, that's why I questioned the practicality of this difference :)
Except perhaps for documenting a function's exception safety. Should it be considered while making aforementioned assignment operators in boost to take the argument by value?

> I think this calculus might get more interesting when rvalue references
> are involved, because you can actually write stronger conditional
> guarantees.

My early impression is that rvalue references are going to make life much more interesting :-)

Thanks for your time, Dave!

Best Regards,
Gevorg

      


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