@@ -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-
2120template <class CharT, class Traits, class Allocator>
2221explicit 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
2928template <class CharT, class Traits, class Allocator>
3029constexpr 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
3746template <class CharT >
3847explicit 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
4352template <class CharT >
4453constexpr 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
7390bitset(
@@ -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