Skip to content

Commit bec6a53

Browse files
committed
bitset : C++26対応としてstring_viewをとるコンストラクタを追加 (close #1197)
1 parent 4d8ffbe commit bec6a53

File tree

1 file changed

+48
-21
lines changed

1 file changed

+48
-21
lines changed

reference/bitset/bitset/op_constructor.md

Lines changed: 48 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,57 +17,74 @@ explicit bitset(
1717
typename basic_string<CharT, Traits, Allocator>::size_type pos = 0,
1818
typename basic_string<CharT, Traits, Allocator>::size_type n =
1919
basic_string<CharT, Traits, Allocator>::npos); // (3) C++03
20-
2120
template <class CharT, class Traits, class Allocator>
2221
explicit bitset(
2322
const basic_string<CharT, Traits, Allocator>& str,
2423
typename basic_string<CharT, Traits, Allocator>::size_type pos = 0,
2524
typename basic_string<CharT, Traits, Allocator>::size_type n =
2625
basic_string<CharT, Traits, Allocator>::npos,
27-
CharT zero = CharT('0'), CharT one = CharT('1')); // (3) C++11
28-
26+
CharT zero = CharT('0'),
27+
CharT one = CharT('1')); // (3) C++11
2928
template <class CharT, class Traits, class Allocator>
3029
constexpr explicit bitset(
3130
const basic_string<CharT, Traits, Allocator>& str,
3231
typename basic_string<CharT, Traits, Allocator>::size_type pos = 0,
3332
typename basic_string<CharT, Traits, Allocator>::size_type n =
3433
basic_string<CharT, Traits, Allocator>::npos,
35-
CharT zero = CharT('0'), CharT one = CharT('1')); // (3) C++23
34+
CharT zero = CharT('0'),
35+
CharT one = CharT('1')); // (3) C++23
36+
37+
template <class CharT, class Traits>
38+
constexpr explicit bitset(
39+
basic_string_view<CharT, Traits> str,
40+
typename basic_string_view<CharT, Traits>::size_type pos = 0,
41+
typename basic_string_view<CharT, Traits>::size_type n =
42+
basic_string_view<charT, Traits>::npos,
43+
CharT zero = CharT('0'),
44+
CharT one = CharT('1')); // (4) C++26
3645

3746
template <class CharT>
3847
explicit bitset(
3948
const CharT* str,
4049
typename basic_string<CharT>::size_type n = basic_string<CharT>::npos,
41-
CharT zero = CharT('0'), CharT one = CharT('1')); // (4) C++11
42-
50+
CharT zero = CharT('0'),
51+
CharT one = CharT('1')); // (5) C++11
4352
template <class CharT>
4453
constexpr explicit bitset(
4554
const CharT* str,
4655
typename basic_string<CharT>::size_type n = basic_string<CharT>::npos,
47-
CharT zero = CharT('0'), CharT one = CharT('1')); // (4) C++23
56+
CharT zero = CharT('0'),
57+
CharT one = CharT('1')); // (5) C++23
58+
template <class CharT>
59+
constexpr explicit bitset(
60+
const CharT* str,
61+
typename basic_string_view<CharT>::size_type n = basic_string_view<CharT>::npos,
62+
CharT zero = CharT('0'),
63+
CharT one = CharT('1')); // (5) C++26
4864
```
4965
* basic_string[link /reference/string/basic_string.md]
5066
5167
## bitsetオブジェクトの構築
52-
- (1) : デフォルトコンストラクタ。
53-
- (2) : 整数値を受け取るコンストラクタ。
54-
- (3) : `'0'`と`'1'`の文字で構成される`basic_string`文字列からビット列を構築する。
55-
- (4) : `'0'`と`'1'`の文字で構成される文字配列からビット列を構築する。
68+
- (1) : デフォルトコンストラクタ
69+
- (2) : 整数値を受け取るコンストラクタ
70+
- (3) : `'0'`と`'1'`の文字で構成される`basic_string`文字列からビット列を構築する
71+
- (4) : `'0'と`'1'`の文字で構成される`[`basic_string_view`](/reference/string_view/basic_string_view.md)オブジェクトからビット列を構築する
72+
- (5) : `'0'`と`'1'`の文字で構成される文字配列からビット列を構築する
5673
5774
5875
## 要件
59-
- (3) : `pos <= str.`[`size()`](/reference/string/basic_string/size.md)
76+
- (3), (4) : `pos <= str.`[`size()`](/reference/string/basic_string/size.md)
6077
6178
6279
## 効果
6380
- (1) : 全てのビットを`0`に初期化する。
6481
- (2) : 整数値`val`でビット列を初期化する。`bitset`クラスのテンプレートパラメータ`N`と`val`のビット数のうち、小さい方の大きさで表現可能なビット列となる。クラステンプレートパラメータ`N`よりも`val`のビット数の方が小さい場合は、残りのビットを`0`で初期化する。
65-
- (3) : 文字列`str`でビット列を初期化する。
82+
- (3), (4) : 文字列`str`でビット列を初期化する。
6683
- ビット列として扱う文字列は`str`の`n`文字目以降である。`n == npos`の場合は`str`の全文字列を使用する。対象となる文字列範囲を`rstr`とする。
6784
- C++03 : 文字列`rstr`に含まれる文字`CharT('0')`をビット値`0`、文字`CharT('1')`をビット値`1`と見なし、対応する値でビット列を構築する。
6885
- C++11 : 文字列`rstr`に含まれる文字`zero`をビット値`0`、文字`one`をビット値`1`と見なし、対応する値でビット列を構築する。
6986
- クラステンプレートパラメータ`N`と文字列`rstr`の長さのうち、小さい方の大きさで表現可能なビット列となる。クラステンプレートパラメータ`N`よりも文字列`rstr`の長さの方が小さい場合は、残りのビットを`0`で初期化する。
70-
- (4) : 以下のように初期化する:
87+
- (5) : 以下のように初期化する:
7188
7289
```cpp
7390
bitset(
@@ -78,10 +95,10 @@ bitset(
7895

7996

8097
## 例外
81-
- (3) : `pos > str.`[`size()`](/reference/string/basic_string/size.md)の場合、[`out_of_range`](/reference/stdexcept.md)例外を送出する。
98+
- (3), (4) : `pos > str.`[`size()`](/reference/string/basic_string/size.md)の場合、[`out_of_range`](/reference/stdexcept.md)例外を送出する。
8299
- C++03 : `str`に`'0'`と`'1'`以外の文字が含まれていた場合、[`invalid_argument`](/reference/stdexcept.md)例外を送出する。
83100
- C++11 : `str`に`zero`と`one`以外の文字が含まれていた場合、[`invalid_argument`](/reference/stdexcept.md)例外を送出する。
84-
- (4) : `str``zero``one`以外の文字が含まれていた場合、[`invalid_argument`](/reference/stdexcept.md)例外を送出する。
101+
- (5) : `str``zero``one`以外の文字が含まれていた場合、[`invalid_argument`](/reference/stdexcept.md)例外を送出する。
85102

86103

87104
##
@@ -103,17 +120,23 @@ int main()
103120
std::cout << "(2) : " << bs << std::endl;
104121
}
105122

106-
// (3) basic_stringから構築
123+
// (3) stringから構築
107124
{
108125
std::bitset<4> bs(std::string("1010"));
109126
std::cout << "(3) : " << bs << std::endl;
110127
}
111128

112-
// (4) 文字配列から構築
129+
// (4) string_viewから構築
113130
{
114-
std::bitset<4> bs("1010");
131+
std::bitset<4> bs{std::string_view("1010")};
115132
std::cout << "(4) : " << bs << std::endl;
116133
}
134+
135+
// (5) 文字配列から構築
136+
{
137+
std::bitset<4> bs("1010");
138+
std::cout << "(5) : " << bs << std::endl;
139+
}
117140
}
118141
```
119142

@@ -123,17 +146,21 @@ int main()
123146
(2) : 1010
124147
(3) : 1010
125148
(4) : 1010
149+
(5) : 1010
126150
```
127151

128152

129153
### 処理系
130-
- (4)のコンストラクタ
154+
- (5)のコンストラクタ
131155
- [Clang](/implementation.md#clang): 3.0
132156
- [GCC](/implementation.md#gcc): 4.5.4
133157
- [Visual C++](/implementation.md#visual_cpp): 2012, 2013, 2015
134158

135159

136160
## 参照
137161
- [LWG Issue 778. `std::bitset` does not have any constructor taking a string literal](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#778)
138-
- (4)のコンストラクタが追加された経緯となるレポート
162+
- (5)のコンストラクタが追加された経緯となるレポート
139163
- [P2417R2 A more constexpr bitset](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2417r2.pdf)
164+
- [P2697R1 Interfacing `bitset` with `string_view`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2697r1.pdf)
165+
- C++26から`string_view`を受け取るコンストラクタが追加された
166+

0 commit comments

Comments
 (0)