From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2019-06-27 16:47:22


On 6/27/19 7:32 PM, Robert Ramey via Boost wrote:
> On 6/27/19 8:43 AM, Andrey Semashev via Boost wrote:
> - From the caller's perspective, a noexcept function will never throw.
>>
>>> In anycase I should have phrased the above as:
>>>
>>> Is swap guaranteed to succeed?
>>
>> In general, no. It is only guaranteed to succeed if it is noexcept.
>> See above when it is noexcept.
>
> A... - I'm still confused.  How can one say that swap is guaranteed to
> succeed when it can result in calling terminate()?

First, people normally don't write noexcept functions knowing they might
throw. Meaning that the call to terminate() is equivalent to a bug.

Second, your code after a noexcept swap() returns will not be run if
terminate() gets called. Meaning that the code is guaranteed to only
operate when swap() successfully returned.