This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of WP status.

### 3616. LWG 3498 seems to miss the non-member `swap` for `basic_syncbuf`

Section: 31.11.2.6 [syncstream.syncbuf.special] Status: WP Submitter: S. B. Tam Opened: 2021-10-07 Last modified: 2022-02-11

Priority: Not Prioritized

View all issues with WP status.

Discussion:

LWG 3498 fixes the inconsistent `noexcept`-specifiers for member functions of `basic_syncbuf`, but the proposed resolution in LWG 3498 seems to miss the non-member `swap`, which also has inconsistent `noexcept`-specifier: 31.11.2.6 [syncstream.syncbuf.special] says it's `noexcept`, while 31.11.1 [syncstream.syn] says it's not.

Since the non-member `swap` and the member `swap` have equivalent effect, and LWG 3498 removes `noexcept` from the latter, I think it's pretty clear that the former should not be `noexcept`.

[2021-10-14; Reflector poll]

Set status to Tentatively Ready after seven votes in favour during reflector poll.

[2022-02-10 Approved at February 2022 virtual plenary. Status changed: Tentatively Ready → WP.]

[2022-02-10; Jens comments]

The desired fix was applied editorially while applying

P2450 C++ Standard Library Issues to be moved in Virtual Plenary, Oct. 2021

Proposed resolution:

This wording is relative to N4892.

1. Modify 31.11.2.6 [syncstream.syncbuf.special] as indicated:

   >     template<class charT, class traits, class Allocator>
   >       void swap(basic_syncbuf<charT, traits, Allocator>& a,
   >                 basic_syncbuf<charT, traits, Allocator>& b) noexcept;

   > > -1- Effects: Equivalent to `a.swap(b)`.