@@ -16,9 +16,14 @@ namespace std {
1616 CONSTEXPR ~ reference() noexcept;
1717 CONSTEXPR reference& operator=(bool x) noexcept;
1818 CONSTEXPR reference& operator=(const reference&) noexcept;
19+ constexpr const reference& operator=(bool x) const noexcept; // C++26
1920 CONSTEXPR bool operator~ () const noexcept;
2021 CONSTEXPR operator bool() const noexcept;
2122 CONSTEXPR reference& flip() noexcept;
23+
24+ friend constexpr void swap(reference x, reference y) noexcept; // C++26
25+ friend constexpr void swap(reference x, bool& y) noexcept; // C++26
26+ friend constexpr void swap(bool& x, reference y) noexcept; // C++26
2227 };
2328 };
2429}
@@ -30,18 +35,30 @@ namespace std {
3035
3136C++23から`bitset::reference`全メンバ関数への`constexpr`指定が行われる。
3237
38+ C++26から、`const`修飾された`*this`に対する`bool`からの代入演算子と、ADLで見つかる非メンバ`swap`関数が追加され、[`vector<bool>::reference`](/reference/vector/vector.md)とインタフェースが統一された。
39+
3340
3441### メンバ関数
3542
3643| 名前 | 説明 | 対応バージョン |
3744|----------------------------|----------------------------------------------------------|-------|
3845| `operator=(bool x)` | ビット情報を書き換える | |
3946| `operator=(const reference&)` | ビット情報をコピーする | |
47+ | `operator=(bool x) const` | `const`な`*this`のビット情報を書き換える | C++26 |
4048| `operator~()` | 反転したビットを取得する | |
4149| `operator bool()` | `bool`型に変換する | |
4250| `flip()` | ビットを反転させる | |
4351
4452
53+ ### 非メンバ関数
54+
55+ | 名前 | 説明 | 対応バージョン |
56+ |------|------|----------------|
57+ | `swap(reference x, reference y)` | 2つの参照先のビットを入れ替える | C++26 |
58+ | `swap(reference x, bool& y)` | 参照先のビットと`bool`を入れ替える | C++26 |
59+ | `swap(bool& x, reference y)` | `bool`と参照先のビットを入れ替える | C++26 |
60+
61+
4562## 例
4663```cpp example
4764#include <cassert>
@@ -75,3 +92,5 @@ int main()
7592
7693## 参照
7794- [ P2417R2 A more constexpr bitset] ( https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2417r2.pdf )
95+ - [ P3612R1 Harmonize proxy-reference operations (LWG 3638 and 4187)] ( https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3612r1.html )
96+ - C++26で、` const ` 修飾された` *this ` に対する` bool ` からの代入演算子と、ADLで見つかる非メンバ` swap ` 関数が追加された
0 commit comments