-
Notifications
You must be signed in to change notification settings - Fork 1
/
rss.xml
712 lines (661 loc) · 55.4 KB
/
rss.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>cpprefjp - C++日本語リファレンス</title>
<link href="https://cpprefjp.github.io" />
<updated>2024-11-29T14:43:31.221277</updated>
<id>107ab35b-14d0-4688-a1e1-21c527931110</id>
<entry>
<title>C++23 -- fix typo</title>
<link href="https://cpprefjp.github.io/lang/cpp23.html"/>
<id>a3aa49f5a4693dd31b60de0f6744afd553928b80:lang/cpp23.md</id>
<updated>2024-11-27T18:37:40+09:00</updated>
<content type="html"><h1 itemprop="name"><span class="token">C++23</span></h1>
<div itemprop="articleBody"><h2>概要</h2>
<p>C++23とは、2023年中に改訂され、ISO/IEC 14882:2024で標準規格化されたC++バージョンの通称である。</p>
<p>このバージョンは、策定中のためC++2bと呼ばれることがある。「(C++20である2020年の次の) 202b年にリリースされる」という伏せ字として「b」が使われているが、3年周期に次のバージョンが策定されることが決まっているため、伏せ字になっている年数がずれることはない。</p>
<h2>言語機能</h2>
<h3>変数</h3>
<table border="1" bordercolor="#888" style="border-collapse:collapse">
<thead>
<tr>
<th>言語機能</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="cpp23/literal_suffix_for_signed_size_t.html">(符号付き)<code>size_t</code>リテラルのためのサフィックス</a></td>
<td><code>42z</code>/<code>42Z</code>とすることで<code>size_t</code>に対応する符号付き整数型のリテラルとする</td>
</tr>
<tr>
<td><a href="cpp23/simpler_implicit_move.html">暗黙的なムーブを簡略化</a></td>
<td>参照を返す関数の<code>return</code>文で暗黙的にムーブされない問題を修正</td>
</tr>
</tbody>
</table>
<p>これらに加えて、ライブラリ機能として拡張浮動小数点数型が定義された。<code><a href="../reference/stdfloat.html">&lt;stdfloat&gt;</a></code>を参照。</p>
<h3>関数</h3>
<table border="1" bordercolor="#888" style="border-collapse:collapse">
<thead>
<tr>
<th>言語機能</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="cpp23/declarations_and_where_to_find_them.md.nolink">スコープと名前ルックアップの仕様整理</a></td>
<td>複雑で不完全になっているスコープと名前ルックアップの仕様を整理し、一部の問題を解決する</td>
</tr>
<tr>
<td><a href="cpp23/meaningful_exports.html">無意味なexport宣言を禁止する</a></td>
<td>いくつかの不必要な宣言に対するモジュールexportを禁止する</td>
</tr>
</tbody>
</table>
<h3>制御構文</h3>
<table border="1" bordercolor="#888" style="border-collapse:collapse">
<thead>
<tr>
<th>言語機能</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="cpp23/extend_init_statement_to_allow_alias_declaration.html">初期化文での型の別名宣言を許可</a></td>
<td><code>for (using T = int; T e : v) {}</code>を許可</td>
</tr>
<tr>
<td><a href="cpp23/lifetime_extension_in_range_based_for_loop.html">範囲for文が範囲初期化子内で生じた一時オブジェクトを延命することを規定</a></td>
<td>範囲初期化子内で生じた一時オブジェクトは範囲for文の終わりまで延命される</td>
</tr>
<tr>
<td><a href="cpp23/labels_at_the_end_of_compound_statements.html">複合文の末尾へのラベルを許可</a></td>
<td>C互換のため、複合文の末尾でのgoto文のラベルを許可する</td>
</tr>
</tbody>
</table>
<h3>クラス</h3>
<table border="1" bordercolor="#888" style="border-collapse:collapse">
<thead>
<tr>
<th>言語機能</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="cpp23/deducing_this.md.nolink">自身のオブジェクトを明示的にパラメータとして指定する</a></td>
<td>メンバ関数が<code>*this</code>の型・オブジェクトをパラメータとしてとり、<code>*this</code>オブジェクトがconst/非const、左辺値/右辺値であるかをメンバ関数内で識別できるようにする</td>
</tr>
<tr>
<td><a href="cpp23/make_declaration_order_layout_mandated.html">アクセス制御の異なるメンバ変数のレイアウトを宣言順に規定</a></td>
<td>アクセス制御の異なるメンバ変数のレイアウトは並び替えを許可されていたが宣言順に規定する</td>
</tr>
<tr>
<td><a href="cpp23/multidimensional_subscript_operator.html">添字演算子の多次元サポート</a></td>
<td><code>operator[](int x, int y, int z)</code>のように添字演算子のオーバーロードで複数のパラメータをとることを許可</td>
</tr>
<tr>
<td><a href="cpp23/static_operator.html"><code>this</code>ポインタをもつ必要のない演算子を<code>static</code>として宣言できるようにする</a></td>
<td>状態をもたないいくつかの演算子を<code>static</code>として宣言できるようにする</td>
</tr>
</tbody>
</table>
<h3>文字列</h3>
<table border="1" bordercolor="#888" style="border-collapse:collapse">
<thead>
<tr>
<th>言語機能</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="cpp23/mixed_string_literal_concatenation.html">異なる文字エンコーディングをもつ文字列リテラルの連結を不適格とする</a></td>
<td><code>auto a = u8"" L"";</code>のような異なる文字エンコーディング同士での文字列リテラルを連結を禁止する</td>
</tr>
<tr>
<td><a href="cpp23/delimited_escape_sequences.html">エスケープシーケンスの区切り</a></td>
<td>エスケープシーケンスの範囲を明確にする構文を追加する</td>
</tr>
<tr>
<td><a href="cpp23/numeric_and_universal_character_escapes_in_character_and_string_literals.md.nolink">文字・文字列リテラル中の数値・ユニバーサルキャラクタのエスケープに関する問題解決</a></td>
<td></td>
</tr>
<tr>
<td><a href="cpp23/remove_non_encodable_wide_character_literals_and_multicharacter_wide_character_literals.html">1ワイド文字に収まらないワイド文字リテラルを禁止する</a></td>
<td>エンコード結果として<code>wchar_t</code>の大きさに収まらないワイド文字リテラルを禁止する</td>
</tr>
<tr>
<td><a href="cpp23/named_universal_character_escapes.html">名前付きユニバーサルキャラクタ名</a></td>
<td>16進数のユニバーサルキャラクタだけでなく、その文字の名前を入力できるようにする</td>
</tr>
</tbody>
</table>
<h3>テンプレート</h3>
<table border="1" bordercolor="#888" style="border-collapse:collapse">
<thead>
<tr>
<th>言語機能</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="cpp23/generalized_wording_for_partial_specializations.html">変数テンプレートの部分特殊化を許可</a></td>
<td>変数テンプレートの部分特殊化を許可するために部分特殊化の仕様を汎用化</td>
</tr>
<tr>
<td><a href="cpp23/class_template_argument_deduction_from_inherited.html">継承コンストラクタからのクラステンプレート引数の推論</a></td>
<td>継承コンストラクタからもクラステンプレート引数を推論できるようにする</td>
</tr>
</tbody>
</table>
<h3>定数式</h3>
<table border="1" bordercolor="#888" style="border-collapse:collapse">
<thead>
<tr>
<th>言語機能</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code><a href="cpp23/if_consteval.html">if consteval</a></code></td>
<td>コンパイル時の文脈かどうかで分岐させる</td>
</tr>
<tr>
<td><a href="cpp23/narrowing_contextual_conversions_to_bool.html">定数式の文脈での<code>bool</code>への縮小変換を許可</a></td>
<td><code>if constexpr(flags &amp; Flags::Exec)</code>や<code>static_assert(N);</code>を許可</td>
</tr>
<tr>
<td><a href="cpp23/non_literal_variables_in_constexpr_functions.html">定数式内での非リテラル変数、静的変数・スレッドローカル変数およびgotoとラベルの存在を許可する</a></td>
<td>コンパイル時に評価されない限り、定数式内に静的変数・スレッドローカル変数およびgoto文とラベルを含むことを許可する</td>
</tr>
<tr>
<td><a href="cpp23/character_encoding_of_diagnostic_text.html">静的な診断メッセージの文字エンコーディング</a></td>
<td><code>static_assert</code>や<code>[[deprecated]]</code>などの診断メッセージの文字集合に関する要件をなくす</td>
</tr>
<tr>
<td><a href="cpp23/relaxing_some_constexpr_restrictions.html"><code>constexpr</code>関数が定数実行できない場合でも適格とする</a></td>
<td>定数式実行できない関数であっても、実際にコンパイル時に評価されない限り<code>constexpr</code>指定することを許可する</td>
</tr>
<tr>
<td><a href="cpp23/permitting_static_constexpr_variables_in_constexpr_functions.html"><code>constexpr</code>関数内での<code>static constexpr</code>変数を許可</a></td>
<td><code>constexpr</code>関数のローカルで定数を定義できるようにする</td>
</tr>
<tr>
<td><a href="cpp23/consteval_needs_to_propagate_up.html"><code>constexpr</code>関数内で<code>consteval</code>関数を呼び出せない問題を軽減</a></td>
<td><code>consteval</code>呼び出しを含む<code>constexpr</code>関数を条件付きで<code>consteval</code>関数とみなすようにする</td>
</tr>
</tbody>
</table>
<h3>ラムダ式</h3>
<table border="1" bordercolor="#888" style="border-collapse:collapse">
<thead>
<tr>
<th>言語機能</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="cpp23/down_with_lambda_parens.html">ラムダ式で<code>()</code>を省略できる条件を緩和</a></td>
<td>修飾や戻り値型をともなってもパラメータリストが空であれば<code>()</code>を省略できる</td>
</tr>
<tr>
<td><a href="cpp23/attributes_on_lambda_expressions.html">ラムダ式に対する属性</a></td>
<td>ラムダ式のいくつかの箇所に属性を記述できるようにする</td>
</tr>
</tbody>
</table>
<h3>属性</h3>
<table border="1" bordercolor="#888" style="border-collapse:collapse">
<thead>
<tr>
<th>言語機能</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="cpp23/portable_assumptions.html">コード内容の仮定をコンパイラに伝えるassume属性</a></td>
<td>最適化のために、コードの仮定をコンパイラに伝える属性を標準化する</td>
</tr>
</tbody>
</table>
<h3>プリプロセッサ</h3>
<table border="1" bordercolor="#888" style="border-collapse:collapse">
<thead>
<tr>
<th>言語機能</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="cpp23/consistent_character_literal_encoding.html">文字リテラルエンコーディングを一貫させる</a></td>
<td>プリプロセッサの条件式での文字リテラルの扱いをC++式と同様にする</td>
</tr>
<tr>
<td><a href="cpp23/add_support_for_preprocessing_directives_elifdef_and_elifndef.html"><code>elif</code>/<code>elifdef</code>/<code>elifndef</code>のサポートを追加</a></td>
<td><code>#if</code>/<code>#ifdef</code>/<code>#ifndef</code>に対応する複数条件命令のサポートを追加する</td>
</tr>
<tr>
<td><a href="cpp23/warning.html"><code>#warning</code>のサポートを追加</a></td>
<td>多くのC++コンパイラが実装していたプリプロセス時の警告<code>#warning message</code>を正式サポート</td>
</tr>
<tr>
<td><a href="cpp23/support_for_utf8_as_a_portable_source_file_encoding.html">汎用的なソースコードのエンコーディングとしてUTF-8をサポート</a></td>
<td>すべてのコンパイラはUTF-8文字コードのソースコードをサポートしなければならない</td>
</tr>
</tbody>
</table>
<h3>小さな変更</h3>
<table border="1" bordercolor="#888" style="border-collapse:collapse">
<thead>
<tr>
<th>言語機能</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="cpp23/predefined_macros.html">更新された定義済みマクロ</a></td>
<td>標準規格で定義されたマクロの更新</td>
</tr>
<tr>
<td><a href="cpp23/update_normative_reference_to_posix.html">参照するPOSIX規格を更新</a></td>
<td>新しいPOSIX規格の機能を標準C++が参照していたため、参照するPOSIX規格のバージョンを更新</td>
</tr>
<tr>
<td><a href="cpp23/trimming_whitespaces_before_line_splicing.html">行末スペースを無視するよう規定</a></td>
<td>行末が「<code>\ </code>」でおわっていた場合にMSVCは行の継続をしない実装になっていたため動作を共通化するため仕様を規定</td>
</tr>
</tbody>
</table>
<h2>ライブラリ更新の概要</h2>
<h3>新ライブラリ</h3>
<ul>
<li>C++標準ライブラリ全体のモジュールとして<code><a href="../module/std.html">std</a></code>、C互換ライブラリ全体のモジュールとして<code><a href="../module/std.compat.html">std.compat</a></code>を追加</li>
<li>スタックトレースを取得するためのライブラリとして<code><a href="../reference/stacktrace.html">&lt;stacktrace&gt;</a></code>を追加</li>
<li>CとC++の間でのアトミック操作の相互運用のため、C互換ライブラリとして<code><a href="../reference/stdatomic.h.html">&lt;stdatomic.h&gt;</a></code>を追加</li>
<li>外部から提供されるメモリバッファでストリーム処理を行うライブラリとして<code><a href="../reference/spanstream.md.nolink">&lt;spanstream&gt;</a></code>を追加</li>
<li>正常値とエラー値のどちらかを持つクラスおよびライブラリとして<code><a href="../reference/expected.html">&lt;expected&gt;</a></code>を追加</li>
<li>多次元配列ビューのライブラリとして<code><a href="../reference/mdspan.html">&lt;mdspan&gt;</a></code>を追加</li>
<li>ノードベースではないソート済みキーによる順序付き連想コンテナのライブラリとして、<code><a href="../reference/flat_map.html">&lt;flat_map&gt;</a></code>と<code><a href="../reference/flat_set.md.nolink">&lt;flat_set&gt;</a></code>を追加</li>
<li>書式指定で出力するライブラリとして<code><a href="../reference/print.html">&lt;print&gt;</a></code>を追加</li>
<li>コルーチンによるRangeの生成をサポートする<code><a href="../reference/generator.html">&lt;generator&gt;</a></code>を追加</li>
<li>拡張浮動小数点数のライブラリとして<code><a href="../reference/stdfloat.html">&lt;stdfloat&gt;</a></code>を追加</li>
</ul>
<h3>コンテナ</h3>
<ul>
<li><code><a href="../reference/stack/stack.html">std::stack</a></code>と<code><a href="../reference/queue/queue.html">std::queue</a></code>に、イテレータのペアをとるコンストラクタを追加</li>
<li><code>auto v = std::vector(v, alloc);</code>のようなアロケータ引数をともなう場合のクラステンプレートのテンプレート引数推論が動作しなかったため、各コンテナクラスのコンストラクタにおけるアロケータパラメータの型を<code>const Allocator&amp;</code>から<code>const <a href="../reference/type_traits/type_identity.html">std::type_identity_t</a>&lt;Allocator&gt;&amp;</code>に修正</li>
<li>N要素のメモリアロケート時にアロケータが実際にどれくらいのメモリを確保したかを得られるインタフェースとして、<ul>
<li><code><a href="../reference/memory/allocator.html">std::allocator</a></code>クラスに、<code><a href="../reference/memory/allocator/allocate_at_least.html">allocate_at_least()</a></code>メンバ関数を追加</li>
<li><code><a href="../reference/memory/allocator_traits.html">std::allocator_traits</a></code>クラスに、<code><a href="../reference/memory/allocator_traits/allocate_at_least.html">allocate_at_least()</a></code>関数を追加</li>
</ul>
</li>
<li><code><a href="../reference/utility/pair.html">std::pair</a></code>の転送コンストラクタにデフォルトテンプレート引数を追加することで、<code>{}</code>のような型推論ができない引数を渡した場合でも完全転送が行われるよう修正</li>
<li>順序付き連想コンテナの要素削除の処理について、一時オブジェクトのコストを抑える拡張が行われた<ul>
<li><code><a href="../reference/map/map/erase.html">std::map::erase()</a></code></li>
<li><code><a href="../reference/map/map/extract.html">std::map::extract()</a></code></li>
</ul>
</li>
<li><code><a href="../reference/ranges.html">&lt;ranges&gt;</a></code>に、複数の範囲を綴じ合わせる<code><a href="../reference/ranges/zip_view.html">std::views::zip</a></code>を追加</li>
<li><code><a href="../reference/ranges.html">&lt;ranges&gt;</a></code>に、複数の範囲の直積をとる<code><a href="../reference/ranges/cartesian_product_view.html">std::views::cartesian_product</a></code>を追加</li>
<li>Rangeから任意のコンテナに変換するRangeアダプタ<code><a href="../reference/ranges/to.html">std::ranges::to()</a></code>を追加</li>
<li>Rangeから任意のコンテナに変換するために、可変長のコンテナ (<code><a href="../reference/array/array.html">std::array</a></code>以外) に、以下の機能を追加:<ul>
<li>Rangeから変換するコンストラクタ</li>
<li>Rangeを挿入する<code>insert_range()</code>メンバ関数</li>
<li>Rangeを先頭に追加する<code>prepend_range()</code>メンバ関数</li>
<li>Rangeを末尾に追加する<code>append_range()</code>メンバ関数</li>
<li>Rangeを代入する<code>assign_range()</code>メンバ関数</li>
</ul>
</li>
<li>ユーザー定義のRangeアダプタがパイプライン演算子 <code>|</code> をサポートしやすくするために、<code><a href="../reference/ranges.html">&lt;ranges&gt;</a></code>に<code><a href="../reference/ranges/range_adaptor_closure.html">std::ranges::range_adaptor_closure</a></code>クラスを追加</li>
<li><code><a href="../reference/ranges.html">&lt;ranges&gt;</a></code>に、Rangeを連結させる<code><a href="../reference/ranges/join_with_view.html">join_with</a></code>を追加</li>
<li>Rangeを指定の大きさで分割する<code><a href="../reference/ranges/chunk_view.html">std::views::chunk</a></code>と、Rangeを指定の大きさの隣接要素で分割する<code><a href="../reference/ranges/slide_view.html">std::views::slide</a></code>を追加</li>
<li>Rangeを条件一致する間の要素で分割する<code><a href="../reference/ranges/chunk_by_view.html">std::views::chunk_by</a></code>を追加</li>
<li><code><a href="../reference/ranges.html">&lt;ranges&gt;</a></code>に、Rangeを等間隔からなるRangeに変換する<code><a href="../reference/ranges/stride_view.html">std::views::stride</a></code>を追加</li>
<li><code><a href="../reference/ranges.html">&lt;ranges&gt;</a></code>に、Rangeをムーブするための<code><a href="../reference/ranges/as_rvalue_view.html">std::views::as_rvalue</a></code>を追加</li>
<li><code><a href="../reference/ranges.html">&lt;ranges&gt;</a></code>に、指定した値をN回繰り返すRangeを生成する<code><a href="../reference/ranges/repeat_view.html">std::views::repeat</a></code>を追加</li>
<li><code><a href="../reference/ranges.html">&lt;ranges&gt;</a></code>に、Rangeをインデックス付きでループさせる<code><a href="../reference/ranges/enumerate_view.html">std::views::enumerate</a></code>を追加</li>
</ul>
<h3>アルゴリズム</h3>
<ul>
<li><code><a href="../reference/algorithm.html">&lt;algorithm&gt;</a></code>に、範囲の先頭が指定した範囲と合致するかを判定する<code><a href="../reference/algorithm/ranges_starts_with.html">std::starts_with()</a></code>、範囲の末尾が指定した範囲と合致するかを判定する<code><a href="../reference/algorithm/ranges_ends_with.html">std::ends_with()</a></code>を追加</li>
<li><code><a href="../reference/algorithm.html">&lt;algorithm&gt;</a></code>に、要素を左シフトさせるRangeアルゴリズム<code><a href="../reference/algorithm/ranges_shift_left.html">std::ranges::shift_left()</a></code>、要素を右シフトさせるRangeアルゴリズム<code><a href="../reference/algorithm/ranges_shift_right.html">std::ranges::shift_right()</a></code>を追加</li>
<li><code><a href="../reference/algorithm.html">&lt;algorithm&gt;</a></code>に、範囲の末尾から要素を検索する以下のアルゴリズムを追加:<ul>
<li><code><a href="../reference/algorithm/ranges_find_last.html">std::ranges::find_last()</a></code></li>
<li><code><a href="../reference/algorithm/ranges_find_last_if.html">std::ranges::find_last_if()</a></code></li>
<li><code><a href="../reference/algorithm/ranges_find_last_if_not.html">std::ranges::find_last_if_not()</a></code></li>
</ul>
</li>
<li><code><a href="../reference/algorithm.html">&lt;algorithm&gt;</a></code>に、範囲に特定の値が含まれているかを判定する<code><a href="../reference/algorithm/ranges_contains.html">std::ranges::contains()</a></code>、<code><a href="../reference/algorithm/ranges_contains_subrange.html">std::ranges::contains_subrange</a></code>を追加</li>
<li><code><a href="../reference/algorithm.html">&lt;algorithm&gt;</a></code>に、数値に限定しない汎用的な畳み込みアルゴリズムとして、以下を追加:<ul>
<li><code><a href="../reference/algorithm/ranges_fold_left.html">std::ranges::fold_left()</a></code></li>
<li><code><a href="../reference/algorithm/ranges_fold_left_first.html">std::ranges::fold_left_first()</a></code></li>
<li><code><a href="../reference/algorithm/ranges_fold_right.html">std::ranges::fold_right()</a></code></li>
<li><code><a href="../reference/algorithm/ranges_fold_right_last.html">std::ranges::fold_right_last()</a></code></li>
<li><code><a href="../reference/algorithm/ranges_fold_left_with_iter.html">std::ranges::fold_left_with_iter()</a></code></li>
<li><code><a href="../reference/algorithm/ranges_fold_left_first_with_iter.html">std::ranges::fold_left_first_with_iter()</a></code></li>
</ul>
</li>
<li><code><a href="../reference/numeric.html">&lt;numeric&gt;</a></code>に、連番を生成するRangeアルゴリズム<code><a href="../reference/numeric/ranges_iota.html">std::ranges::iota()</a></code>を追加</li>
</ul>
<h3>文字列</h3>
<ul>
<li><code><a href="../reference/string/basic_string.html">std::basic_string</a></code>クラスと<code><a href="../reference/string_view/basic_string_view.html">std::basic_string_view</a></code>クラスに、文字列内に指定した文字・文字列が含まれているかを判定するメンバ関数<code>contains()</code>を追加</li>
<li><code><a href="../reference/string_view/basic_string_view.html">std::basic_string_view</a></code>のコンストラクタに、範囲をとるオーバーロードを追加</li>
<li><code>std::string s = nullptr;</code>のような文字列オブジェクトに<code>nullptr</code>を代入するようなコードはバグの元であるため、<code><a href="../reference/string/basic_string.html">std::basic_string</a></code>と<code><a href="../reference/string_view/basic_string_view.html">std::basic_string_view</a></code>に、<code><a href="../reference/cstddef/nullptr_t.html">nullptr_t</a></code>をとるコンストラクタをdelete定義として追加</li>
<li><code><a href="../reference/string/basic_string.html">std::basic_string</a></code>クラスに、resize時に任意の初期化を行う<code><a href="../reference/string/basic_string/resize_and_overwrite.html">resize_and_overwrite()</a></code>メンバ関数を追加</li>
<li><code><a href="../reference/string/basic_string.html">std::basic_string</a></code>クラスのコンストラクタと<code><a href="../reference/string/basic_string/substr.html">substr()</a></code>メンバ関数に一時オブジェクトのオーバーロードを追加</li>
<li><code><a href="../reference/format/format.html">std::format()</a></code>関数でRange・コンテナ、<code><a href="../reference/tuple/tuple.html">std::tuple</a></code>、<code><a href="../reference/utility/pair.html">std::pair</a></code>を出力できるよう、<code><a href="../reference/format/formatter.html">std::formatter</a></code>に特殊化を追加<ul>
<li>Range・シーケンスコンテナは<code>[1, 2, 3]</code>、<code>["hello", "world"]</code>、<code>['a', 'b', 'c']</code>のように出力される</li>
<li>連想コンテナの場合、<code>std::map&lt;int, int&gt;{{1, 2}, {3, 4}}</code>は<code>{1: 2, 3: 4}</code>のように出力され、<code>std::set&lt;int&gt;{1, 2, 3}</code>は<code>{1, 2, 3}</code>のように出力される</li>
<li><code><a href="../reference/tuple/tuple.html">std::tuple</a></code>、<code><a href="../reference/utility/pair.html">std::pair</a></code>は<code>(1, 2)</code>のように出力される</li>
</ul>
</li>
<li><code><a href="../reference/format/format.html">std::format()</a></code>関数のフォーマット指定子としてデバッグ指定「<code>"?"</code>」を追加。これは文字・文字列を引用符で囲み、エスケープシーケンスをエスケープする<ul>
<li>ただし、Range・コンテナ中の文字・文字列はデフォルトでエスケープされる</li>
<li><code>format("{:?}", "h\tello")</code>は<code>"h\tello"</code>のように出力される</li>
</ul>
</li>
</ul>
<h3>入出力</h3>
<ul>
<li><code><a href="../reference/ostream/basic_ostream.html">std::basic_ostream</a></code>クラスの<code><a href="../reference/ostream/basic_ostream/op_ostream.html">operator&lt;&lt;</a></code>に、<code>const volatile void*</code>をとるオーバーロードを追加</li>
<li>ファイルを開く際のオプションとして、排他モードを表す<code><a href="../reference/ios/ios_base/type-openmode.html">noreplace</a></code>を追加</li>
</ul>
<h3>関数オブジェクト</h3>
<ul>
<li><code><a href="../reference/functional/invoke.html">std::invoke()</a></code>の戻り値型を指定するバージョンである<code><a href="../reference/functional/invoke_r.html">std::invoke_r()</a></code>を追加</li>
<li><code><a href="../reference/functional/function.html">std::function</a></code>クラスと等価な機能をもつ、ムーブのみ可能な<code><a href="../reference/functional/move_only_function.html">std::move_only_function</a></code>クラスを追加</li>
<li>ユーザー定義のRangeアダプタがパイプライン演算子 <code>|</code> をサポートしやすくするために、末尾から引数を束縛する<code><a href="../reference/functional/bind_back.html">std::bind_back()</a></code>関数を追加</li>
</ul>
<h3>メモリ</h3>
<ul>
<li><code><a href="../reference/memory.html">&lt;memory&gt;</a></code>に、レガシーC関数からスマートポインタへの直接出力をサポートする、スマートポインタアダプタ<code><a href="../reference/memory/out_ptr.html">std::out_ptr</a></code>と<code><a href="../reference/memory/inout_ptr.html">std::inout_ptr</a></code>を追加</li>
<li><code><a href="../reference/memory/unique_ptr.html">std::unique_ptr</a></code>クラスを<code>constexpr</code>に対応</li>
<li><code><a href="../reference/memory.html">&lt;memory&gt;</a></code>に、オブジェクトの生存期間を開始することを明示する関数として、<code><a href="../reference/memory/start_lifetime_as.md.nolink">std::start_lifetime_as()</a></code>と<code><a href="../reference/memory/start_lifetime_as_array.md.nolink">std::start_lifetime_as_array()</a></code>を追加</li>
<li><code><a href="../reference/bit.html">&lt;bit&gt;</a></code>に、値のバイト入れ替え (エンディアン変換) を行う<code><a href="../reference/bit/byteswap.html">std::byteswap()</a></code>関数を追加</li>
</ul>
<h3>ユーティリティ</h3>
<ul>
<li><code><a href="../reference/variant/visit.html">std::visit()</a></code>に指定できるバリアントオブジェクトを、直接的な「<code><a href="../reference/variant/variant.html">std::variant</a></code>型の特殊化であること」という制約を緩和し、<code><a href="../reference/variant/variant.html">std::variant</a></code>から派生した型も許可</li>
<li><code><a href="../reference/utility.html">&lt;utility&gt;</a></code>に、列挙値を基底型に変換する<code><a href="../reference/utility/to_underlying.html">std::to_underlying()</a></code>関数を追加</li>
<li><code><a href="../reference/utility.html">&lt;utility&gt;</a></code>に、 (主に) メンバ変数を転送するため、指定された型の<code>const</code>性と参照修飾で引数を転送する<code><a href="../reference/utility/forward_like.html">std::forward_like()</a></code>関数を追加</li>
<li><code><a href="../reference/optional/optional.html">std::optional</a></code>クラスにモナド操作としてメンバ関数<code><a href="../reference/optional/optional/and_then.html">and_then()</a></code>、<code><a href="../reference/optional/optional/transform.html">transform()</a></code>、<code><a href="../reference/optional/optional/or_else.html">or_else()</a></code>を追加</li>
<li>到達しないパスであることを表明する関数<code><a href="../reference/utility/unreachable.html">std::unreachable()</a></code>を追加</li>
<li><code><a href="../reference/bitset/bitset.html">std::bitset</a></code>クラスをさらに<code>constexpr</code>対応</li>
</ul>
<h3>型情報</h3>
<ul>
<li><code><a href="../reference/typeinfo/type_info.html">std::type_info</a></code>クラスの<code><a href="../reference/typeinfo/type_info/op_equal.html">operator==</a></code>を<code>constexpr</code>に対応</li>
</ul>
<h3>型特性</h3>
<ul>
<li><code><a href="../reference/type_traits.html">&lt;type_traits&gt;</a></code>に、スコープ付き列挙型かを判定する型特性<code><a href="../reference/type_traits/is_scoped_enum.html">std::is_scoped_enum</a></code>を追加</li>
<li><code><a href="../reference/type_traits.html">&lt;type_traits&gt;</a></code>に、一時オブジェクトの参照への束縛を検出するための型特性として、以下を追加:<ul>
<li><code><a href="../reference/type_traits/reference_constructs_from_temporary.html">std::reference_constructs_from_temporary</a></code></li>
<li><code><a href="../reference/type_traits/reference_converts_from_temporary.html">std::reference_converts_from_temporary</a></code></li>
</ul>
</li>
</ul>
<h3>C互換ライブラリ</h3>
<ul>
<li><code><a href="../reference/cstdlib.html">&lt;cstdlib&gt;</a></code>ヘッダと<code><a href="../reference/cmath.html">&lt;cmath&gt;</a></code>ヘッダの多くの関数を<code>constexpr</code>に対応</li>
</ul>
<h3>機能の非推奨化</h3>
<ul>
<li><code><a href="../reference/type_traits/aligned_storage.html">std::aligned_storage</a></code>と<code><a href="../reference/type_traits/aligned_union.html">std::aligned_union</a></code>を非推奨化。これらの機能は未定義動作を引き起こし、間違った保証が行われ、よくないAPI設計が行われていたため、非推奨とする<ul>
<li><code><a href="../reference/type_traits/aligned_storage.html">std::aligned_storage</a></code>の代わりに<code>alignas(T) <a href="../reference/cstddef/byte.html">std::byte</a>[sizeof(T)];</code>を使用することを推奨する</li>
<li><code><a href="../reference/type_traits/aligned_union.html">std::aligned_union</a></code>の代わりに<code>alignas(Ts...) <a href="../reference/cstddef/byte.html">std::byte</a>[<a href="../reference/algorithm/max.html">std::max</a>({sizeof(Ts)...})];</code>を使用することを推奨する</li>
</ul>
</li>
<li><code><a href="../reference/memory/allocator.html">std::allocator</a></code>のメンバ型<code>is_always_equal</code>を非推奨化。これはアロケータが状態をもたないことを表す型でありデフォルトでは<code><a href="../reference/type_traits/true_type.html">true_type</a></code>となっている。状態をもつユーザー定義のアロケータ型でこのメンバ型の上書きを忘れることでバグが埋め込まれてしまっていたため誤用防止のために非推奨とする</li>
<li><code><a href="../reference/limits.html">&lt;limits&gt;</a></code>の以下の非正規化数に関する機能を非推奨化。これらの機能は必ずしもコンパイル時に決まらない可能性のある値であり有用でないため、非推奨とする<ul>
<li><code><a href="../reference/limits/numeric_limits.html">std::numeric_limits</a>::<a href="../reference/limits/numeric_limits/has_denorm.html">has_denorm</a></code></li>
<li><code><a href="../reference/limits/numeric_limits.html">std::numeric_limits</a>::<a href="../reference/limits/numeric_limits/has_denorm_loss.html">has_denorm_loss</a></code></li>
<li><code><a href="../reference/limits/float_denorm_style.html">std::float_denorm_style</a></code></li>
</ul>
</li>
</ul>
<h3>機能の削除</h3>
<ul>
<li>ガベージコレクションの実装にうまく役立てられなかった、ガベージコレクション実装のサポートをする以下の機能を削除する:<ul>
<li><code><a href="../reference/memory/declare_reachable.html">std::declare_reachable()</a></code></li>
<li><code><a href="../reference/memory/undeclare_reachable.html">std::undeclare_reachable()</a></code></li>
<li><code><a href="../reference/memory/declare_no_pointers.html">std::declare_no_pointers()</a></code></li>
<li><code><a href="../reference/memory/undeclare_no_pointers.html">std::undeclare_no_pointers()</a></code></li>
<li><code><a href="../reference/memory/get_pointer_safety.html">std::get_pointer_safety()</a></code></li>
<li><code><a href="../reference/memory/pointer_safety.html">std::pointer_safety</a></code></li>
<li><a href="cpp11/predefined_macros.html"><code>__STDCPP_STRICT_POINTER_SAFETY__</code>マクロ</a></li>
</ul>
</li>
</ul>
<h3>取り決め</h3>
<ul>
<li>以下のヘッダの一部機能をフリースタンディングライブラリとして追加:<ul>
<li><code><a href="../reference/utility.html">&lt;utility&gt;</a></code></li>
<li><code><a href="../reference/tuple.html">&lt;tuple&gt;</a></code></li>
<li><code><a href="../reference/memory.html">&lt;memory&gt;</a></code></li>
<li><code><a href="../reference/functional.html">&lt;functional&gt;</a></code></li>
<li><code><a href="../reference/ratio.html">&lt;ratio&gt;</a></code></li>
<li><code><a href="../reference/iterator.html">&lt;iterator&gt;</a></code></li>
<li><code><a href="../reference/ranges.html">&lt;ranges&gt;</a></code></li>
</ul>
</li>
</ul></div></content>
<author>
<name>Akira Takahashi</name>
<email>[email protected]</email>
</author>
</entry>
<entry>
<title>emplace -- fix typo in samples</title>
<link href="https://cpprefjp.github.io/reference/flat_map/flat_map/emplace.html"/>
<id>4212149bfed3cf3d7fbe0e5431515aeac069712f:reference/flat_map/flat_map/emplace.md</id>
<updated>2024-11-20T20:48:00+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/flat_map/flat_map/emplace.md b/reference/flat_map/flat_map/emplace.md
index 22f1df248..155d95fdc 100644
--- a/reference/flat_map/flat_map/emplace.md
+++ b/reference/flat_map/flat_map/emplace.md
@@ -88,7 +88,7 @@ struct Point {
int main()
{
- stdx::flat_map&lt;std::string, Point&gt; fm;
+ std::flat_map&lt;std::string, Point&gt; fm;
fm.emplace(std::piecewise_construct,
std::forward_as_tuple(3, &#39;C&#39;), // キーの型std::stringのコンストラクタ引数を渡す
</code></pre></summary>
<author>
<name>suomesta</name>
<email>[email protected]</email>
</author>
</entry>
<entry>
<title>empty -- fix typo in samples</title>
<link href="https://cpprefjp.github.io/reference/flat_map/flat_map/empty.html"/>
<id>4212149bfed3cf3d7fbe0e5431515aeac069712f:reference/flat_map/flat_map/empty.md</id>
<updated>2024-11-20T20:48:00+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/flat_map/flat_map/empty.md b/reference/flat_map/flat_map/empty.md
index 74651c935..3e1f3fe6d 100644
--- a/reference/flat_map/flat_map/empty.md
+++ b/reference/flat_map/flat_map/empty.md
@@ -31,7 +31,7 @@
int main ()
{
- stdx::flat_map&lt;int, char&gt; fm;
+ std::flat_map&lt;int, char&gt; fm;
std::cout &lt;&lt; fm.empty() &lt;&lt; std::endl;
</code></pre></summary>
<author>
<name>suomesta</name>
<email>[email protected]</email>
</author>
</entry>
<entry>
<title>operator<=> -- fix typo in samples</title>
<link href="https://cpprefjp.github.io/reference/flat_map/flat_map/op_compare_3way.html"/>
<id>4212149bfed3cf3d7fbe0e5431515aeac069712f:reference/flat_map/flat_map/op_compare_3way.md</id>
<updated>2024-11-20T20:48:00+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/flat_map/flat_map/op_compare_3way.md b/reference/flat_map/flat_map/op_compare_3way.md
index 40c926b92..7223f7e55 100644
--- a/reference/flat_map/flat_map/op_compare_3way.md
+++ b/reference/flat_map/flat_map/op_compare_3way.md
@@ -50,13 +50,13 @@ return lexicographical_compare_three_way(
int main()
{
- stdx::flat_map&lt;int, char&gt; fm1 = {
+ std::flat_map&lt;int, char&gt; fm1 = {
{3, &#39;a&#39;},
{1, &#39;b&#39;},
{4, &#39;c&#39;}
};
- stdx::flat_map&lt;int, char&gt; fm2 = {
+ std::flat_map&lt;int, char&gt; fm2 = {
{3, &#39;a&#39;},
{1, &#39;b&#39;},
};
</code></pre></summary>
<author>
<name>suomesta</name>
<email>[email protected]</email>
</author>
</entry>
<entry>
<title>insert_range -- unordered_{map,set}/*/insert_range: 「コードブロックのあとに空行が必要な制限」に纏わる修正</title>
<link href="https://cpprefjp.github.io/reference/unordered_map/unordered_map/insert_range.html"/>
<id>5259ff6bc67ca8b95d5b9450555a4ca2de97a3ee:reference/unordered_map/unordered_map/insert_range.md</id>
<updated>2024-11-18T19:25:35+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/unordered_map/unordered_map/insert_range.md b/reference/unordered_map/unordered_map/insert_range.md
index 09141d2bc..955631bfe 100644
--- a/reference/unordered_map/unordered_map/insert_range.md
+++ b/reference/unordered_map/unordered_map/insert_range.md
@@ -63,6 +63,7 @@ C 12
B 11
A 10
```
+
注:[`unordered_map`](/reference/unordered_map/unordered_map.md) は非順序連想コンテナであるため、出力順序は無意味であることに注意
</code></pre></summary>
<author>
<name>Koichi Murase</name>
<email>[email protected]</email>
</author>
</entry>
<entry>
<title>insert_range -- unordered_{map,set}/*/insert_range: 「コードブロックのあとに空行が必要な制限」に纏わる修正</title>
<link href="https://cpprefjp.github.io/reference/unordered_map/unordered_multimap/insert_range.html"/>
<id>5259ff6bc67ca8b95d5b9450555a4ca2de97a3ee:reference/unordered_map/unordered_multimap/insert_range.md</id>
<updated>2024-11-18T19:25:35+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/unordered_map/unordered_multimap/insert_range.md b/reference/unordered_map/unordered_multimap/insert_range.md
index 922c6050e..b63190f40 100644
--- a/reference/unordered_map/unordered_multimap/insert_range.md
+++ b/reference/unordered_map/unordered_multimap/insert_range.md
@@ -64,6 +64,7 @@ B 11
B 11
A 10
```
+
注:[`unordered_multimap`](/reference/unordered_map/unordered_multimap.md) は非順序連想コンテナであるため、出力順序は無意味であることに注意
</code></pre></summary>
<author>
<name>Koichi Murase</name>
<email>[email protected]</email>
</author>
</entry>
<entry>
<title>insert_range -- unordered_{map,set}/*/insert_range: 「コードブロックのあとに空行が必要な制限」に纏わる修正</title>
<link href="https://cpprefjp.github.io/reference/unordered_set/unordered_multiset/insert_range.html"/>
<id>5259ff6bc67ca8b95d5b9450555a4ca2de97a3ee:reference/unordered_set/unordered_multiset/insert_range.md</id>
<updated>2024-11-18T19:25:35+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/unordered_set/unordered_multiset/insert_range.md b/reference/unordered_set/unordered_multiset/insert_range.md
index f44f7a72f..4a194ac8b 100644
--- a/reference/unordered_set/unordered_multiset/insert_range.md
+++ b/reference/unordered_set/unordered_multiset/insert_range.md
@@ -61,6 +61,7 @@ int main ()
```
4 3 3 2 2 1
```
+
注:[`unordered_multiset`](/reference/unordered_set/unordered_multiset.md) は非順序連想コンテナであるため、出力順序は無意味であることに注意
</code></pre></summary>
<author>
<name>Koichi Murase</name>
<email>[email protected]</email>
</author>
</entry>
<entry>
<title>insert_range -- unordered_{map,set}/*/insert_range: 「コードブロックのあとに空行が必要な制限」に纏わる修正</title>
<link href="https://cpprefjp.github.io/reference/unordered_set/unordered_set/insert_range.html"/>
<id>5259ff6bc67ca8b95d5b9450555a4ca2de97a3ee:reference/unordered_set/unordered_set/insert_range.md</id>
<updated>2024-11-18T19:25:35+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/unordered_set/unordered_set/insert_range.md b/reference/unordered_set/unordered_set/insert_range.md
index eb1b80ecc..a91d5a9e0 100644
--- a/reference/unordered_set/unordered_set/insert_range.md
+++ b/reference/unordered_set/unordered_set/insert_range.md
@@ -61,6 +61,7 @@ int main ()
```
4 3 2 1
```
+
注:[`unordered_set`](/reference/unordered_set/unordered_set.md) は非順序連想コンテナであるため、出力順序は無意味であることに注意
</code></pre></summary>
<author>
<name>Koichi Murase</name>
<email>[email protected]</email>
</author>
</entry>
<entry>
<title>cpprefjpでのMarkdown記法の制限と拡張 -- Markdownの制限 : 「コードブロックのあとに空行が必要な制限」を追加 #1362</title>
<link href="https://cpprefjp.github.io/start_editing/markdown_cpprefjp.html"/>
<id>aacc4df55989bc9337150909a9bd8ab429312730:start_editing/markdown_cpprefjp.md</id>
<updated>2024-11-18T19:07:23+09:00</updated>
<summary type="html"><pre><code>diff --git a/start_editing/markdown_cpprefjp.md b/start_editing/markdown_cpprefjp.md
index c15f6e563..9c5543c1a 100644
--- a/start_editing/markdown_cpprefjp.md
+++ b/start_editing/markdown_cpprefjp.md
@@ -87,6 +87,9 @@ comment out text...
* リスト2
```
+### コードブロックのあとに空行が必要な制限
+後述する「プログラムの修飾に関する拡張」に関連して、コードブロックのあとに説明文章を書く際には空行をあけなければなりません。
+
## Markdown記法の拡張
</code></pre></summary>
<author>
<name>Akira Takahashi</name>
<email>[email protected]</email>
</author>
</entry>
<entry>
<title>cpprefjpでのMarkdown記法の制限と拡張 -- HTMLエンティティの表示崩れを修正 #1362</title>
<link href="https://cpprefjp.github.io/start_editing/markdown_cpprefjp.html"/>
<id>c747f4a71f9ab8a4dfaf1a21424e58bd5ed73f55:start_editing/markdown_cpprefjp.md</id>
<updated>2024-11-18T18:08:56+09:00</updated>
<summary type="html"><pre><code>diff --git a/start_editing/markdown_cpprefjp.md b/start_editing/markdown_cpprefjp.md
index 501891627..c15f6e563 100644
--- a/start_editing/markdown_cpprefjp.md
+++ b/start_editing/markdown_cpprefjp.md
@@ -57,7 +57,8 @@ comment out text...
```
&amp;reg;
```
-のような書き方をすると、cpprefjpではエラーになります。HTML エンティティを使わず、以下のように書いてください。
+
+上記のような書き方をすると、cpprefjpではエラーになります。HTML エンティティを使わず、以下のように書いてください。
```
®
</code></pre></summary>
<author>
<name>Akira Takahashi</name>
<email>[email protected]</email>
</author>
</entry>
</feed>