-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathrss.xml
More file actions
455 lines (402 loc) · 21.9 KB
/
rss.xml
File metadata and controls
455 lines (402 loc) · 21.9 KB
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
<?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>2026-03-04T15:07:46.001087</updated>
<id>751b6965-1e16-4b18-99b5-ce5eff0a5ecb</id>
<entry>
<title>コンストラクタ -- fix typo in std::stop_source constructor</title>
<link href="https://cpprefjp.github.io/reference/stop_token/stop_source/op_constructor.html"/>
<id>34807ad138ee7205356b55eaa8d5bebde5ca9d11:reference/stop_token/stop_source/op_constructor.md</id>
<updated>2026-03-02T21:14:38+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/stop_token/stop_source/op_constructor.md b/reference/stop_token/stop_source/op_constructor.md
index 4ec0e0a4a..15b6be35f 100644
--- a/reference/stop_token/stop_source/op_constructor.md
+++ b/reference/stop_token/stop_source/op_constructor.md
@@ -22,7 +22,7 @@ stop_source(stop_source&amp;&amp; rhs) noexcept; // (4)
## 事後条件
- (1) : [`stop_possible()`](stop_possible.md) `==` `true` かつ[`stop_requested()`](stop_requested.md) `==` `false`。
- (2) : [`stop_possible()`](stop_possible.md) `==` `false` かつ[`stop_requested()`](stop_requested.md) `==` `false`。
-- (2) : `*this` `==` `rhs`。(`rhs`が停止状態を所有していれば、`*this`と`rhs`は同じ停止状態を共有するようになる)
+- (3) : `*this` `==` `rhs`。(`rhs`が停止状態を所有していれば、`*this`と`rhs`は同じ停止状態を共有するようになる)
- (4) : もし`rhs`が停止状態を所有していればその所有権が`*this`へ移動し、`rhs.`[`stop_possible()`](stop_possible.md) `==` `false`となる。
## 例外
</code></pre></summary>
<author>
<name>suomesta</name>
<email>shawn316michaels@gmail.com</email>
</author>
</entry>
<entry>
<title>operator= -- fix status after moved in std::stop_token and std::stop_source</title>
<link href="https://cpprefjp.github.io/reference/stop_token/stop_source/op_assign.html"/>
<id>5bc091a499b48a71c6d0674e992bba204ba96cbc:reference/stop_token/stop_source/op_assign.md</id>
<updated>2026-03-02T21:13:26+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/stop_token/stop_source/op_assign.md b/reference/stop_token/stop_source/op_assign.md
index f2a3e8b4c..10da57525 100644
--- a/reference/stop_token/stop_source/op_assign.md
+++ b/reference/stop_token/stop_source/op_assign.md
@@ -17,7 +17,7 @@ stop_source&amp; operator=(stop_source&amp;&amp; r) noexcept; // (2)
## 効果
- (1) : [`stop_source`](op_constructor.md)`(r).`[`swap`](swap.md)`(*this)`。これによって `*this` `==` `r` となる。
-- (2) : [`stop_source`](op_constructor.md)`(std::`[`move`](/reference/utility/move.md)`(r)).`[`swap`](swap.md)`(*this)`。これによって、`r.`[`stop_possible()`](stop_possible.md) `==` `true` となる。
+- (2) : [`stop_source`](op_constructor.md)`(std::`[`move`](/reference/utility/move.md)`(r)).`[`swap`](swap.md)`(*this)`。これによって、`r.`[`stop_possible()`](stop_possible.md) `==` `false` となる。
## 戻り値
`*this`
</code></pre></summary>
<author>
<name>suomesta</name>
<email>shawn316michaels@gmail.com</email>
</author>
</entry>
<entry>
<title>operator= -- fix status after moved in std::stop_token and std::stop_source</title>
<link href="https://cpprefjp.github.io/reference/stop_token/stop_token/op_assign.html"/>
<id>5bc091a499b48a71c6d0674e992bba204ba96cbc:reference/stop_token/stop_token/op_assign.md</id>
<updated>2026-03-02T21:13:26+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/stop_token/stop_token/op_assign.md b/reference/stop_token/stop_token/op_assign.md
index e21059e3d..854261b07 100644
--- a/reference/stop_token/stop_token/op_assign.md
+++ b/reference/stop_token/stop_token/op_assign.md
@@ -17,7 +17,7 @@ stop_token&amp; operator=(stop_token&amp;&amp; r) noexcept; // (2)
## 効果
- (1) : [`stop_token`](op_constructor.md)`(r).`[`swap`](swap.md)`(*this)`。これによって `*this` `==` `r` となる。
-- (2) : [`stop_token`](op_constructor.md)`(std::`[`move`](/reference/utility/move.md)`(r)).`[`swap`](swap.md)`(*this)`。これによって、`r.`[`stop_possible()`](stop_possible.md) `==` `true` となる。
+- (2) : [`stop_token`](op_constructor.md)`(std::`[`move`](/reference/utility/move.md)`(r)).`[`swap`](swap.md)`(*this)`。これによって、`r.`[`stop_possible()`](stop_possible.md) `==` `false` となる。
## 戻り値
`*this`
</code></pre></summary>
<author>
<name>suomesta</name>
<email>shawn316michaels@gmail.com</email>
</author>
</entry>
<entry>
<title>可変引数が空でない場合のトークン置換 [P0306R4] -- fix comments in sample</title>
<link href="https://cpprefjp.github.io/lang/cpp20/va_opt.html"/>
<id>cc5dbfd9f81c52e64808d3ba72db2d535d0340af:lang/cpp20/va_opt.md</id>
<updated>2026-03-02T21:08:56+09:00</updated>
<summary type="html"><pre><code>diff --git a/lang/cpp20/va_opt.md b/lang/cpp20/va_opt.md
index ef1fc4927..3df7d2267 100644
--- a/lang/cpp20/va_opt.md
+++ b/lang/cpp20/va_opt.md
@@ -41,8 +41,8 @@ SDEF(bar, 1, 2, 3); // S bar = {1, 2, 3}; に展開される
int main()
{
- DEBUG_LOG(&#34;hello&#34;); // printf(&#34;[debug] hello\n&#34;); に展開される
- DEBUG_LOG(&#34;value:%d&#34;, 3); // printf(&#34;[debug] value:%d\n&#34;, 3); に展開される
+ DEBUG_LOG(&#34;hello&#34;); // std::printf(&#34;[debug] hello\n&#34;); に展開される
+ DEBUG_LOG(&#34;value:%d&#34;, 3); // std::printf(&#34;[debug] value:%d\n&#34;, 3); に展開される
}
```
</code></pre></summary>
<author>
<name>suomesta</name>
<email>shawn316michaels@gmail.com</email>
</author>
</entry>
<entry>
<title>未初期化変数の読み取りをエラー性動作とする [P2795R5] -- C++26 エラー性動作 : 終了タイミングの規定に対応 #1557</title>
<link href="https://cpprefjp.github.io/lang/cpp26/erroneous_behavior_for_uninitialized_reads.html"/>
<id>0f8a83b77cfa4921d386f19f6ac07da65f415857:lang/cpp26/erroneous_behavior_for_uninitialized_reads.md</id>
<updated>2026-02-27T12:59:29+09:00</updated>
<summary type="html"><pre><code>diff --git a/lang/cpp26/erroneous_behavior_for_uninitialized_reads.md b/lang/cpp26/erroneous_behavior_for_uninitialized_reads.md
index 777703aa8..0f97c5873 100644
--- a/lang/cpp26/erroneous_behavior_for_uninitialized_reads.md
+++ b/lang/cpp26/erroneous_behavior_for_uninitialized_reads.md
@@ -24,7 +24,7 @@ int main() {
未初期化の値は、コンパイラやターゲット環境によって定義された固定値である。コンパイラにはこの誤りを診断することが許可され、推奨されているが、誤りを無視して有効な読み取りとして扱うことも許可されている。このコードは誤りではあるが、実行ごとに異なる動作をしたり攻撃者に値を制御されたりといったリスクはなくなる。
-エラー性動作は未定義動作(一切の保証が失われる)とはちがって、動作を定めたうえで診断も可能とするものである。
+エラー性動作は未定義動作(一切の保証が失われる)とはちがって、動作を定めたうえで診断も可能とするものである。エラー性動作が起きた場合、処理系はその操作の実行時点で診断を発行すること、およびプログラムの実行を終了させることが許可されるが、必須ではない。
C++26では、不定値で初期化されることを明確に指示する`[[indeterminate]]`属性も導入され、以下のような動作となる:
@@ -49,7 +49,8 @@ int main() {
- 式が評価された結果としてエラー性の値が生成された場合、エラー性動作を引き起こす
- ただし、`unsigned char`(およびunsignedとなる場合は`char`)もしくは[`std::byte`](/reference/cstddef/byte.md)型のエラー性の値がこれらの型のオブジェクトの初期化・代入に使用される場合や値が破棄される場合はエラー性動作にならない
- これらのルールは、式が評価された結果として不定値が生成された場合に未定義の動作を引き起こすとする従来のルールと同様である
-- エラー性動作を引き起こしたうえで生成された値は、後続の処理ではエラー性の値とはみなされない
+- prvalueを生成する組み込み演算子のオペランドが評価された結果としてエラー性の値を生成し、かつ破棄される値の式でない場合、その演算子が生成する値もエラー性の値となる
+- エラー性動作を引き起こしたうえで生成された値もエラー性の値となる (エラー性の値は演算を通じて伝播する)
```cpp example
#include &lt;cassert&gt;
@@ -61,20 +62,19 @@ int g(bool b) {
assert(c == d); // 常に真、エラー性動作 (整数昇格)
- int e = d; // エラー性動作 (型変換)
+ int e = d; // エラー性動作 (型変換)。eはエラー性の値をもつ
return b ? d : 0; // bがtrueの場合にエラー性動作
}
int main() {
int d1, d2;
- int e1 = d1; // エラー性動作
- int e2 = d1; // エラー性動作
+ int e1 = d1; // エラー性動作。e1はエラー性の値をもつ
+ int e2 = d1; // エラー性動作。e2はエラー性の値をもつ
// 処理が続行した場合…
- assert(e1 == e2); // 常に真、エラー性動作ではない。
- // エラー性動作の結果で生成された値 (e1とe2) は、
- // エラー性の値とはみなされない
+ assert(e1 == e2); // 常に真、エラー性動作
+ // (e1とe2はエラー性の値をもつ)
assert(e1 == d1); // 常に真、エラー性動作
assert(e2 == d1); // 常に真、エラー性動作
@@ -143,3 +143,4 @@ int main() {
## 参照
- [P2795R5 Erroneous behaviour for uninitialized reads](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2795r5.html)
+- [P3684R1 Fix erroneous behaviour termination semantics for C++26](https://isocpp.org/files/papers/P3684R1.pdf)
</code></pre></summary>
<author>
<name>Akira Takahashi</name>
<email>faithandbrave@gmail.com</email>
</author>
</entry>
<entry>
<title>basic_format_parse_context -- format : C++26対応として、精度や幅を指定した場合でもコンパイル時の型チェックが行われるようにする拡張機能を追加 #1193</title>
<link href="https://cpprefjp.github.io/reference/format/basic_format_parse_context.html"/>
<id>6b6628d7d36fc2d94d2e90f59827fbad351a4a45:reference/format/basic_format_parse_context.md</id>
<updated>2026-02-27T12:03:43+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/format/basic_format_parse_context.md b/reference/format/basic_format_parse_context.md
index c0012399d..73a717a3f 100644
--- a/reference/format/basic_format_parse_context.md
+++ b/reference/format/basic_format_parse_context.md
@@ -34,6 +34,9 @@ namespace std {
| [`advance_to`](basic_format_parse_context/advance_to.md) | 指定したイテレータを先頭イテレータとして設定する | C++20 |
| `next_arg_id` | フォーマット引数の番号を次に進める | C++20 |
| `check_arg_id` | フォーマット引数の番号指定が有効か確かめる | C++20 |
+| [`check_dynamic_spec`](basic_format_parse_context/check_dynamic_spec.md) | 動的な幅・精度の引数の型を検証する | C++26 |
+| [`check_dynamic_spec_integral`](basic_format_parse_context/check_dynamic_spec_integral.md) | 動的な幅・精度の引数の型が整数型か検証する | C++26 |
+| [`check_dynamic_spec_string`](basic_format_parse_context/check_dynamic_spec_string.md) | 動的な幅・精度の引数の型が文字列型か検証する | C++26 |
## メンバ型
@@ -62,10 +65,10 @@ namespace std {
size_t num_args_;
public:
- explicit constexpr basic_format_parse_context(basic_string_view&lt;charT&gt; fmt, size_t num_args = 0) noexcept
+ explicit constexpr basic_format_parse_context(basic_string_view&lt;charT&gt; fmt) noexcept
:begin_(fmt.begin())
,end_(fmt.end())
- ,num_args_(num_args)
+ ,num_args_(0)
{}
basic_format_parse_context(const basic_format_parse_context&amp;) = delete;
@@ -108,6 +111,19 @@ namespace std {
throw format_error(&#34;mixing of automatic and manual argument indexing&#34;);
}
}
+
+ template&lt;class... Ts&gt;
+ constexpr void check_dynamic_spec(size_t id) noexcept;
+
+ constexpr void check_dynamic_spec_integral(size_t id) noexcept
+ {
+ check_dynamic_spec&lt;int, unsigned int, long long int, unsigned long long int&gt;(id);
+ }
+
+ constexpr void check_dynamic_spec_string(size_t id) noexcept
+ {
+ check_dynamic_spec&lt;const char_type*, basic_string_view&lt;char_type&gt;&gt;(id);
+ }
};
}
```
@@ -126,3 +142,4 @@ namespace std {
## 参照
* [P0645R10 Text Formatting](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html)
+* [P2757R3 Type-checking format args](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2757r3.html)
</code></pre></summary>
<author>
<name>Akira Takahashi</name>
<email>faithandbrave@gmail.com</email>
</author>
</entry>
<entry>
<title>check_dynamic_spec -- format : C++26対応として、精度や幅を指定した場合でもコンパイル時の型チェックが行われるようにする拡張機能を追加 #1193</title>
<link href="https://cpprefjp.github.io/reference/format/basic_format_parse_context/check_dynamic_spec.html"/>
<id>6b6628d7d36fc2d94d2e90f59827fbad351a4a45:reference/format/basic_format_parse_context/check_dynamic_spec.md</id>
<updated>2026-02-27T12:03:43+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/format/basic_format_parse_context/check_dynamic_spec.md b/reference/format/basic_format_parse_context/check_dynamic_spec.md
new file mode 100644
index 000000000..2226e5cd8
--- /dev/null
+++ b/reference/format/basic_format_parse_context/check_dynamic_spec.md
@@ -0,0 +1,75 @@
+# check_dynamic_spec
+* format[meta header]
+* function template[meta id-type]
+* std[meta namespace]
+* basic_format_parse_context[meta class]
+* cpp26[meta cpp]
+
+```cpp
+template&lt;class... Ts&gt;
+constexpr void check_dynamic_spec(size_t id) noexcept;
+```
+
+## 概要
+動的な幅・精度の引数の型がコンパイル時に正しいか検証する。
+
+この関数はコンパイル時の定数式としてのみ意味のある検証を行う。`id`に対応するフォーマット引数の型が`Ts...`のいずれかでなければ、呼び出しがコア定数式ではなくなり、コンパイルエラーとなる。
+
+## 適格要件
+- `Ts...`の型は一意であること
+- `Ts...`の各型は、`bool`, `char_type`, `int`, `unsigned int`, `long long int`, `unsigned long long int`, `float`, `double`, `long double`, `const char_type*`, [`basic_string_view`](/reference/string_view/basic_string_view.md)`&lt;char_type&gt;`, `const void*` のいずれかであること
+
+## 備考
+`id &gt;= num_args_`である場合、または`id`に対応するフォーマット引数の型が`Ts...`のいずれでもない場合、呼び出しはコア定数式ではない。
+
+## 例
+### 動的な幅指定の正しい使用
+```cpp example
+#include &lt;format&gt;
+#include &lt;iostream&gt;
+
+int main()
+{
+ // OK: 動的な幅に整数を指定
+ std::cout &lt;&lt; std::format(&#34;{:&gt;{}}&#34;, &#34;hello&#34;, 10) &lt;&lt; std::endl;
+
+ // OK: 引数番号を明示的に指定して動的な幅を使用
+ std::cout &lt;&lt; std::format(&#34;{0:&gt;{1}}&#34;, &#34;hello&#34;, 10) &lt;&lt; std::endl;
+}
+```
+
+#### 出力
+```
+ hello
+ hello
+```
+
+### C++26でコンパイルエラーになる例 (C++23では実行時エラー)
+```cpp
+#include &lt;format&gt;
+#include &lt;string&gt;
+
+int main()
+{
+ // C++23: 実行時エラー
+ // C++26: コンパイルエラー
+ // 動的な幅に文字列を渡しているが、整数型が必要
+ std::string s = std::format(&#34;{:&gt;{}}&#34;, &#34;hello&#34;, &#34;10&#34;);
+}
+```
+
+C++23まではフォーマット引数の型チェックが実行時に行われるため、動的な幅に`&#34;10&#34;`(文字列)を指定した場合は実行時に[`format_error`](/reference/format/format_error.md)例外が送出されていた。
+
+C++26では、[`formatter`](/reference/format/formatter.md)の[`parse()`](/reference/format/formatter/parse.md)内で`check_dynamic_spec_integral()`が呼ばれることにより、コンパイル時に型の不一致が検出されるようになった。
+
+## バージョン
+### 言語
+- C++26
+
+### 処理系
+- [Clang](/implementation.md#clang): ??
+- [GCC](/implementation.md#gcc): ??
+- [Visual C++](/implementation.md#visual_cpp): ??
+
+## 参照
+- [P2757R3 Type-checking format args](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2757r3.html)
</code></pre></summary>
<author>
<name>Akira Takahashi</name>
<email>faithandbrave@gmail.com</email>
</author>
</entry>
<entry>
<title>check_dynamic_spec_integral -- format : C++26対応として、精度や幅を指定した場合でもコンパイル時の型チェックが行われるようにする拡張機能を追加 #1193</title>
<link href="https://cpprefjp.github.io/reference/format/basic_format_parse_context/check_dynamic_spec_integral.html"/>
<id>6b6628d7d36fc2d94d2e90f59827fbad351a4a45:reference/format/basic_format_parse_context/check_dynamic_spec_integral.md</id>
<updated>2026-02-27T12:03:43+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/format/basic_format_parse_context/check_dynamic_spec_integral.md b/reference/format/basic_format_parse_context/check_dynamic_spec_integral.md
new file mode 100644
index 000000000..6deb789ea
--- /dev/null
+++ b/reference/format/basic_format_parse_context/check_dynamic_spec_integral.md
@@ -0,0 +1,33 @@
+# check_dynamic_spec_integral
+* format[meta header]
+* function[meta id-type]
+* std[meta namespace]
+* basic_format_parse_context[meta class]
+* cpp26[meta cpp]
+
+```cpp
+constexpr void check_dynamic_spec_integral(size_t id) noexcept;
+```
+
+## 概要
+動的な幅・精度の引数の型が整数型かコンパイル時に検証する。
+
+## 効果
+以下と等価:
+
+```cpp
+check_dynamic_spec&lt;int, unsigned int, long long int, unsigned long long int&gt;(id);
+```
+* check_dynamic_spec[link check_dynamic_spec.md]
+
+## バージョン
+### 言語
+- C++26
+
+### 処理系
+- [Clang](/implementation.md#clang): ??
+- [GCC](/implementation.md#gcc): ??
+- [Visual C++](/implementation.md#visual_cpp): ??
+
+## 参照
+- [P2757R3 Type-checking format args](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2757r3.html)
</code></pre></summary>
<author>
<name>Akira Takahashi</name>
<email>faithandbrave@gmail.com</email>
</author>
</entry>
<entry>
<title>check_dynamic_spec_string -- format : C++26対応として、精度や幅を指定した場合でもコンパイル時の型チェックが行われるようにする拡張機能を追加 #1193</title>
<link href="https://cpprefjp.github.io/reference/format/basic_format_parse_context/check_dynamic_spec_string.html"/>
<id>6b6628d7d36fc2d94d2e90f59827fbad351a4a45:reference/format/basic_format_parse_context/check_dynamic_spec_string.md</id>
<updated>2026-02-27T12:03:43+09:00</updated>
<summary type="html"><pre><code>diff --git a/reference/format/basic_format_parse_context/check_dynamic_spec_string.md b/reference/format/basic_format_parse_context/check_dynamic_spec_string.md
new file mode 100644
index 000000000..fe4129335
--- /dev/null
+++ b/reference/format/basic_format_parse_context/check_dynamic_spec_string.md
@@ -0,0 +1,34 @@
+# check_dynamic_spec_string
+* format[meta header]
+* function[meta id-type]
+* std[meta namespace]
+* basic_format_parse_context[meta class]
+* cpp26[meta cpp]
+
+```cpp
+constexpr void check_dynamic_spec_string(size_t id) noexcept;
+```
+
+## 概要
+動的な幅・精度の引数の型が文字列型かコンパイル時に検証する。
+
+## 効果
+以下と等価:
+
+```cpp
+check_dynamic_spec&lt;const char_type*, basic_string_view&lt;char_type&gt;&gt;(id);
+```
+* check_dynamic_spec[link check_dynamic_spec.md]
+* basic_string_view[link /reference/string_view/basic_string_view.md]
+
+## バージョン
+### 言語
+- C++26
+
+### 処理系
+- [Clang](/implementation.md#clang): ??
+- [GCC](/implementation.md#gcc): ??
+- [Visual C++](/implementation.md#visual_cpp): ??
+
+## 参照
+- [P2757R3 Type-checking format args](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2757r3.html)
</code></pre></summary>
<author>
<name>Akira Takahashi</name>
<email>faithandbrave@gmail.com</email>
</author>
</entry>
</feed>