[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / clang / www / c_status.html
blob5eefdda4cc45b69f20e5666ee6e6dd96fde1216e
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5 <title>Clang - C Programming Language Status</title>
6 <link type="text/css" rel="stylesheet" href="menu.css">
7 <link type="text/css" rel="stylesheet" href="content.css">
8 <style type="text/css">
9 .none { background-color: #FFCCCC }
10 .partial { background-color: #FFE0B0 }
11 .unreleased { background-color: #FFFF99 }
12 .unknown { background-color: #FF55FF }
13 .full { background-color: #CCFF99 }
14 .na { background-color: #DDDDDD }
15 :target { background-color: #FFFFBB; outline: #DDDD55 solid thin; }
16 th { background-color: #FFDDAA }
17 td { vertical-align: middle }
18 tt { white-space: nowrap }
19 </style>
20 </head>
21 <body>
23 <!--#include virtual="menu.html.incl"-->
25 <div id="content">
27 <!--*************************************************************************-->
28 <h1>C Support in Clang</h1>
29 <!--*************************************************************************-->
31 <p>Clang implements the following published and upcoming ISO C standards:</p>
33 <table width="689" border="1" cellspacing="0">
34 <tr>
35 <th>Language Standard</th>
36 <th>Flag</th>
37 <th>Available in Clang?</th>
38 </tr>
39 <tr>
40 <td><a href="#c89">C89</a></td>
41 <td><tt>-std=c89</tt></td>
42 <td class="full" align="center">Yes</td>
43 </tr>
44 <tr>
45 <td><a href="#c99">C99</a></td>
46 <td><tt>-std=c99</tt></td>
47 <td class="unknown" align="center">Almost certainly</td>
48 </tr>
49 <tr>
50 <td><a href="#c11">C11</a></td>
51 <td><tt>-std=c11</tt></td>
52 <td class="unknown" align="center">Probably</td>
53 </tr>
54 <tr>
55 <td><a href="#c17">C17</a></td>
56 <td><tt>-std=c17</tt></td>
57 <td class="unknown" align="center">Maybe?</td>
58 </tr>
59 <tr>
60 <td><a href="#c2x">C2x</a></td>
61 <td><tt>-std=c2x</tt></td>
62 <td class="partial" align="center">Partial</td>
63 </tr>
64 </table>
66 <p>The implementation status for C99, C11, and C17 are currently under
67 investigation. Any proposal whose status in Clang is currently unknown
68 will be marked in <span class="unknown">magenta</span>.</p>
70 <p>The Clang community is continually striving to improve C standards
71 compliance between releases by submitting and tracking
72 <a href="c_dr_status.html">C Defect Reports</a> and implementing resolutions as
73 they become available.</p>
75 <p>The <a href="https://github.com/llvm/llvm-project/issues/">LLVM bug tracker</a> uses
76 the "c", "c99", "c11", "c17", and "c2x" labels to track known bugs with Clang's language
77 conformance.</p>
79 <h2 id="c89">C89 implementation status</h2>
81 <p>Clang implements all of the ISO 9899:1990 (C89) standard.</p>
82 <p>You can use Clang in C89 mode with the <code>-std=c89</code> or <code>-std=c90</code> options.</p>
84 <h2 id="c99">C99 implementation status</h2>
86 <p>Clang implements a significant portion of the ISO 9899:1999 (C99) standard, but the status of individual proposals is still under investigation.</p>
87 <p>Note, the list of C99 features comes from the C99 committee draft. Not all C99 documents are publicly available, so the documents referenced in this section may be inaccurate, unknown, or not linked.</p>
88 <!-- https://www.open-std.org/jtc1/sc22/wg14/www/docs/n874.htm contains the
89 final editor's report of what's been added to C99, but it includes more
90 papers than are worth listing because it includes editorial and cleanup
91 proposals in addition to feature proposals. When a paper is not available,
92 I list the paper number from the editor's report, but do not hyperlink it.
93 When I can't map the feature back to a paper, I mark it as unknown. -->
94 <p>You can use Clang in C99 mode with the <code>-std=c99</code> option.</p>
96 <details>
97 <summary>List of features and minimum Clang version with support</summary>
99 <table width="689" border="1" cellspacing="0">
100 <tr>
101 <th>Language Feature</th>
102 <th>C99 Proposal</th>
103 <th>Available in Clang?</th>
104 </tr>
105 <tr>
106 <td>restricted character set support via digraphs and &lt;iso646.h&gt;</td>
107 <td>Unknown</td>
108 <td class="unknown" align="center">Unknown</td>
109 </tr>
110 <tr>
111 <td>more precise aliasing rules via effective type</td>
112 <td>Unknown</td>
113 <td class="unknown" align="center">Unknown</td>
114 </tr>
115 <tr>
116 <td>restricted pointers</td>
117 <td>N448</td>
118 <td class="unknown" align="center">Unknown</td>
119 </tr>
120 <tr>
121 <td>variable length arrays</td>
122 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n683.htm">N683</a></td>
123 <td class="full" align="center">Yes</td>
124 </tr>
125 <tr>
126 <td>flexible array members</td>
127 <td>Unknown</td>
128 <td class="full" align="center">Yes</td>
129 </tr>
130 <tr>
131 <td>static and type qualifiers in parameter array declarators</td>
132 <td>Unknown</td>
133 <td class="full" align="center">Yes</td>
134 </tr>
135 <tr>
136 <td>more precise aliasing rules via effective type</td>
137 <td>Unknown</td>
138 <td class="unknown" align="center">Unknown</td>
139 </tr>
140 <tr id="complex">
141 <td rowspan="6">complex and imaginary support in &lt;complex.h&gt;</td>
142 </tr>
143 <tr>
144 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n620.ps">N620</a></td>
145 <td class="unknown" align="center">Unknown</td>
146 </tr>
147 <tr>
148 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n638.ps">N638</a></td>
149 <td class="unknown" align="center">Unknown</td>
150 </tr>
151 <tr>
152 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n657.ps">N657</a></td>
153 <td class="unknown" align="center">Unknown</td>
154 </tr>
155 <tr>
156 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n694.ps">N694</a></td>
157 <td class="unknown" align="center">Unknown</td>
158 </tr>
159 <tr>
160 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n809.ps">N809</a></td>
161 <td class="unknown" align="center">Unknown</td>
162 </tr>
163 <tr>
164 <td>type-generic math macros in &lt;tgmath.h&gt;</td>
165 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n693.ps">N693</a></td>
166 <td class="full" align="center">Yes</td>
167 </tr>
168 <tr>
169 <td>the long long int type</td>
170 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n601.ps">N601</a></td>
171 <td class="full" align="center">Yes</td>
172 </tr>
173 <tr>
174 <td>increase minimum translation limits</td>
175 <td>N590</td>
176 <td class="unknown" align="center">Unknown</td>
177 </tr>
178 <tr>
179 <td>additional floating-point characteristics in &lt;float.h&gt;</td>
180 <td>Unknown</td>
181 <td class="unknown" align="center">Unknown</td>
182 </tr>
183 <tr id="implicit int">
184 <td rowspan="4">remove implicit int</td>
185 </tr>
186 <tr>
187 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n635.htm">N635</a></td>
188 <td class="full" align="center">Yes</td>
189 </tr>
190 <tr>
191 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n692.htm">N692</a></td>
192 <td class="full" align="center">Yes</td>
193 </tr>
194 <tr>
195 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n722.htm">N722</a></td>
196 <td class="full" align="center">Yes</td>
197 </tr>
198 <tr>
199 <td>reliable integer division</td>
200 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n617.htm">N617</a></td>
201 <td class="full" align="center">Yes</td>
202 </tr>
203 <tr>
204 <td>universal character names (\u and \U)</td>
205 <td>Unknown</td>
206 <td class="full" align="center">Yes</td>
207 </tr>
208 <tr>
209 <td>extended identifiers</td>
210 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n717.htm">N717</a></td>
211 <td class="unknown" align="center">Unknown</td>
212 </tr>
213 <tr>
214 <td>hexadecimal floating-point constants</td>
215 <td>N308</td>
216 <!-- This is a total guess. N874 makes no mention of N308 being accepted,
217 but it does mention *use* of hexadecimal floating-point constants in
218 the Menlo Park minutes associated with N787. -->
219 <td class="full" align="center">Yes</td>
220 </tr>
221 <tr>
222 <td>compound literals</td>
223 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n716.htm">N716</a></td>
224 <td class="full" align="center">Yes</td>
225 </tr>
226 <tr>
227 <td>designated initializers</td>
228 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n494.pdf">N494</a></td>
229 <td class="full" align="center">Yes</td>
230 </tr>
231 <tr>
232 <td>// comments</td>
233 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n644.htm">N644</a></td>
234 <td class="full" align="center">Yes</td>
235 </tr>
236 <tr>
237 <td>extended integer types and library functions in &lt;inttypes.h&gt; and &lt;stdint.h&gt;</td>
238 <td>Unknown</td>
239 <!-- Seems to be related to https://www.open-std.org/jtc1/sc22/wg14/www/docs/n788.htm
240 but that does not have any content for stdint.h. The next paper I could find on
241 the topic was https://www.open-std.org/jtc1/sc22/wg14/www/docs/n851.htm but that
242 implies stdint.h was already added. -->
243 <td class="full" align="center">Yes</td>
244 </tr>
245 <tr>
246 <td>remove implicit function declaration</td>
247 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n636.htm">N636</a></td>
248 <td class="full" align="center">Yes</td>
249 </tr>
250 <tr>
251 <td>preprocessor arithmetic done in intmax_t/uintmax_t</td>
252 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n736.htm">N736</a></td>
253 <td class="full" align="center">Yes</td>
254 </tr>
255 <tr>
256 <td>mixed declarations and code</td>
257 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n740.htm">N740</a></td>
258 <td class="full" align="center">Yes</td>
259 </tr>
260 <tr>
261 <td>new block scopes for selection and iteration statements</td>
262 <td>Unknown</td>
263 <td class="unknown" align="center">Unknown</td>
264 </tr>
265 <tr>
266 <td>integer constant type rules</td>
267 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n629.htm">N629</a></td>
268 <td class="full" align="center">Yes</td>
269 </tr>
270 <tr>
271 <td>integer promotion rules</td>
272 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n725.htm">N725</a></td>
273 <td class="unknown" align="center">Unknown</td>
274 </tr>
275 <tr>
276 <td>macros with a variable number of arguments</td>
277 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n707.htm">N707</a></td>
278 <td class="full" align="center">Yes</td>
279 </tr>
280 <tr>
281 <td>IEC 60559 support</td>
282 <td>Unknown</td>
283 <td class="unknown" align="center">Unknown</td>
284 </tr>
285 <tr>
286 <td>trailing comma allowed in enum declaration</td>
287 <td>Unknown</td>
288 <td class="full" align="center">Yes</td>
289 </tr>
290 <tr>
291 <td>inline functions</td>
292 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n741.htm">N741</a></td>
293 <td class="full" align="center">Yes</td>
294 </tr>
295 <tr>
296 <td>boolean type in &lt;stdbool.h&gt;</td>
297 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n815.htm">N815</a></td>
298 <td class="full" align="center">Yes</td>
299 </tr>
300 <tr>
301 <td>idempotent type qualifiers</td>
302 <td>N505</td>
303 <td class="unknown" align="center">Unknown</td>
304 </tr>
305 <tr>
306 <td>empty macro arguments</td>
307 <td>N570</td>
308 <td class="unknown" align="center">Unknown</td>
309 </tr>
310 <tr>
311 <td>new structure type compatibility (tag compatibility)</td>
312 <td>N522</td>
313 <td class="unknown" align="center">Unknown</td>
314 </tr>
315 <tr>
316 <td>additional predefined macro names</td>
317 <td>Unknown</td>
318 <td class="unknown" align="center">Unknown</td>
319 </tr>
320 <tr>
321 <td>_Pragma preprocessing operator</td>
322 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n634.ps">N634</a></td>
323 <!-- This may not be quite right as it proposes a `pragma` operator and
324 not a _Pragma operator. However, I didn't see further papers on the
325 renamed form, so I assume this was accepted with modification. -->
326 <td class="full" align="center">Yes</td>
327 </tr>
328 <tr id="standard pragmas">
329 <td rowspan="3">standard pragmas</td>
330 </tr>
331 <tr>
332 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n631.htm">N631</a></td>
333 <td class="unknown" align="center">Unknown</td>
334 </tr>
335 <tr>
336 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n696.ps">N696</a></td>
337 <td class="unknown" align="center">Unknown</td>
338 </tr>
339 <tr>
340 <td>__func__ predefined identifier</td>
341 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n611.ps">N611</a></td>
342 <td class="full" align="center">Yes</td>
343 </tr>
344 <tr>
345 <td>va_copy macro</td>
346 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n671.htm">N671</a></td>
347 <td class="full" align="center">Yes</td>
348 </tr>
349 <tr>
350 <td>LIA compatibility annex</td>
351 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n792.htm">N792</a></td>
352 <td class="none" align="center">No</td>
353 </tr>
354 <tr>
355 <td>remove deprecation of aliased array parameters</td>
356 <td>Unknown</td>
357 <td class="unknown" align="center">Unknown</td>
358 </tr>
359 <tr>
360 <td>conversion of array to pointer not limited to lvalues</td>
361 <td>Unknown</td>
362 <td class="unknown" align="center">Unknown</td>
363 </tr>
364 <tr>
365 <td>relaxed constraints on aggregate and union initialization</td>
366 <td>Unknown</td>
367 <td class="unknown" align="center">Unknown</td>
368 </tr>
369 <tr>
370 <td>relaxed restrictions on portable header names</td>
371 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n772.htm">N772</a></td>
372 <td class="unknown" align="center">Unknown</td>
373 </tr>
374 <tr>
375 <td>return without an expression not permitted in function that returns a value</td>
376 <td>Unknown</td>
377 <td class="full" align="center">Yes</td>
378 </tr>
379 </table>
380 </details>
382 <h2 id="c11">C11 implementation status</h2>
384 <p>Clang implements a significant portion of the ISO 9899:2011 (C11) standard, but the status of individual proposals is still under investigation.</p>
385 <p>You can use Clang in C11 mode with the <code>-std=c11</code> option (use <code>-std=c1x</code> in Clang 3.0 and earlier).</p>
387 <details>
388 <summary>List of features and minimum Clang version with support</summary>
390 <table width="689" border="1" cellspacing="0">
391 <tr>
392 <th>Language Feature</th>
393 <th>C11 Proposal</th>
394 <th>Available in Clang?</th>
395 </tr>
396 <tr>
397 <td>A finer-grained specification for sequencing</td>
398 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1252.htm">N1252</a></td>
399 <td class="unknown" align="center">Unknown</td>
400 </tr>
401 <tr>
402 <td>Clarification of expressions</td>
403 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1282.pdf">N1282</a></td>
404 <td class="unknown" align="center">Unknown</td>
405 </tr>
406 <tr>
407 <td>Extending the lifetime of temporary objects (factored approach)</td>
408 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1285.htm">N1285</a></td>
409 <td class="unknown" align="center">Unknown</td>
410 </tr>
411 <tr>
412 <td>Requiring signed char to have no padding bits</td>
413 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1310.htm">N1310</a></td>
414 <td class="unknown" align="center">Unknown</td>
415 </tr>
416 <tr>
417 <td>Initializing static or external variables</td>
418 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1311.pdf">N1311</a></td>
419 <td class="unknown" align="center">Unknown</td>
420 </tr>
421 <tr>
422 <td>Conversion between pointers and floating types</td>
423 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1316.htm">N1316</a></td>
424 <td class="full" align="center">Yes</td>
425 </tr>
426 <tr>
427 <td>Adding TR 19769 to the C Standard Library</td>
428 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1326.pdf">N1326</a></td>
429 <td class="full" align="center">Clang 3.3</td>
430 </tr>
431 <tr>
432 <td>Static assertions</td>
433 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1330.pdf">N1330</a></td>
434 <td class="full" align="center">Yes</td>
435 </tr>
436 <tr>
437 <td>Parallel memory sequencing model proposal</td>
438 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1349.htm">N1349</a></td>
439 <td class="unknown" align="center">Unknown</td>
440 </tr>
441 <tr>
442 <td>Analyzability (#1, #4 - conditionally normative)</td>
443 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1350.htm">N1350</a></td>
444 <td class="unknown" align="center">Unknown</td>
445 </tr>
446 <tr>
447 <td>FLT_EVAL_METHOD issues (first change only)</td>
448 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1353.pdf">N1353</a></td>
449 <td class="unknown" align="center">Unknown</td>
450 </tr>
451 <tr>
452 <td>_Bool bit-fields</td>
453 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1356.htm">N1356</a></td>
454 <td class="full" align="center">Yes</td>
455 </tr>
456 <tr>
457 <td>Technical corrigendum for C1X</td>
458 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1359.htm">N1359</a></td>
459 <td class="unknown" align="center">Unknown</td>
460 </tr>
461 <tr>
462 <td>Benign typedef redefinition</td>
463 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1360.htm">N1360</a></td>
464 <td class="full" align="center">Clang 3.1</td>
465 </tr>
466 <tr>
467 <td>Thread-local storage</td>
468 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1364.htm">N1364</a></td>
469 <td class="full" align="center">Clang 3.3</td>
470 </tr>
471 <tr>
472 <td>Constant expressions</td>
473 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1365.htm">N1365</a></td>
474 <td class="unknown" align="center">Unknown</td>
475 </tr>
476 <tr>
477 <td>Contractions and expression evaluation methods</td>
478 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1367.htm">N1367</a></td>
479 <td class="unknown" align="center">Unknown</td>
480 </tr>
481 <tr>
482 <td>FLT_EVAL_METHOD and return</td>
483 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1382.htm">N1382</a></td>
484 <td class="unknown" align="center">Unknown</td>
485 </tr>
486 <tr>
487 <td>Floating-point to int/_Bool conversions</td>
488 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1391.htm">N1391</a></td>
489 <td class="full" align="center">Yes</td>
490 </tr>
491 <tr>
492 <td>Analyzability (along the lines)</td>
493 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1394.htm">N1394</a></td>
494 <td class="unknown" align="center">Unknown</td>
495 </tr>
496 <tr>
497 <td>Wide function returns (alternate proposal)</td>
498 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1396.htm">N1396</a></td>
499 <td class="unknown" align="center">Unknown</td>
500 </tr>
501 <tr id="alignment">
502 <td rowspan="3">Alignment</td>
503 </tr>
504 <tr>
505 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1397.htm">N1397</a></td>
506 <td class="full" align="center">Clang 3.2</td>
507 </tr>
508 <tr>
509 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1447.htm">N1447</a></td>
510 <td class="full" align="center">Clang 3.2</td>
511 </tr>
512 <tr>
513 <td>Anonymous member-structures and unions (modulo "name lookup")</td>
514 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1406.pdf">N1406</a></td>
515 <td class="full" align="center">Yes</td>
516 </tr>
517 <tr>
518 <td>Completeness of types</td>
519 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1439.pdf">N1439</a></td>
520 <td class="full" align="center">Yes</td>
521 </tr>
522 <tr>
523 <td>Generic macro facility</td>
524 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1441.htm">N1441</a></td>
525 <td class="full" align="center">Yes</td>
526 </tr>
527 <tr>
528 <td>Dependency ordering for C memory model</td>
529 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1444.htm">N1444</a></td>
530 <td class="unknown" align="center">Unknown</td>
531 </tr>
532 <tr>
533 <td>Subsetting the standard</td>
534 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1460.htm">N1460</a></td>
535 <td class="full" align="center">Yes</td>
536 </tr>
537 <tr>
538 <td>Assumed types in F.9.2</td>
539 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1468.htm">N1468</a></td>
540 <td class="unknown" align="center">Unknown</td>
541 </tr>
542 <tr>
543 <td>Supporting the 'noreturn' property in C1x</td>
544 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1478.htm">N1478</a></td>
545 <td class="full" align="center">Clang 3.3</td>
546 </tr>
547 <tr>
548 <td>Updates to C++ memory model based on formalization</td>
549 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1480.htm">N1480</a></td>
550 <td class="unknown" align="center">Unknown</td>
551 </tr>
552 <tr>
553 <td>Explicit initializers for atomics</td>
554 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1482.htm">N1482</a></td>
555 <td class="unknown" align="center">Unknown</td>
556 </tr>
557 <tr>
558 <td>Atomics proposal (minus ternary op)</td>
559 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1485.pdf">N1485</a></td>
560 <td class="full" align="center">Yes</td>
561 </tr>
562 <tr>
563 <td>UTF-8 string literals</td>
564 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1488.htm">N1488</a></td>
565 <td class="full" align="center">Clang 3.3</td>
566 </tr>
567 <tr>
568 <td>Optimizing away infinite loops</td>
569 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1509.pdf">N1509</a></td>
570 <td class="full" align="center">Yes</td>
571 </tr>
572 <tr>
573 <td>Conditional normative status for Annex G</td>
574 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1514.pdf">N1514</a></td>
575 <td class="unknown" align="center">Unknown</td>
576 </tr>
577 <tr>
578 <td>Creation of complex value</td>
579 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1464.htm">N1464</a></td>
580 <td class="unknown" align="center">Unknown</td>
581 </tr>
582 <tr>
583 <td>Recommendations for extended identifier characters for C and C++</td>
584 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1518.htm">N1518</a></td>
585 <td class="unknown" align="center">Unknown</td>
586 </tr>
587 <tr>
588 <td>Atomic C1x/C++0x compatibility refinements (1st part only)</td>
589 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1526.pdf">N1526</a></td>
590 <td class="full" align="center">Yes</td>
591 </tr>
592 <tr>
593 <td>Atomic bitfields implementation defined</td>
594 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1530.pdf">N1530</a></td>
595 <td class="full" align="center">Yes</td>
596 </tr>
597 <tr>
598 <td>Small fix for the effect of alignment on struct/union type compatibility</td>
599 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1532.htm">N1532</a></td>
600 <td class="full" align="center">Yes</td>
601 </tr>
602 <tr>
603 <td>Synthesis re _Atomic</td>
604 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1537.htm">N1537</a></td>
605 <td class="unknown" align="center">Unknown</td>
606 </tr>
607 <tr>
608 <td>Clarification for wide evaluation</td>
609 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1531.pdf">N1531</a></td>
610 <td class="unknown" align="center">Unknown</td>
611 </tr>
612 </table>
613 </details>
615 <h2 id="c17">C17 implementation status</h2>
617 <p>There are no major changes in this edition, only technical corrections and clarifications that are tracked by Defect Report.</p>
618 <p>You can use Clang in C17 mode with the <code>-std=c17</code> or <code>-std=c18</code> options (available in Clang 6 and later).</p>
620 <h2 id="c2x">C2x implementation status</h2>
622 <p>Clang has support for some of the features of the C standard following C17, informally referred to as C2x.</p>
624 <p>You can use Clang in C2x mode with the <code>-std=c2x</code> option (available in Clang 9 and later).</p>
626 <details open>
627 <summary>List of features and minimum Clang version with support</summary>
629 <table width="689" border="1" cellspacing="0">
630 <tr>
631 <th>Language Feature</th>
632 <th>C2x Proposal</th>
633 <th>Available in Clang?</th>
634 </tr>
635 <!-- Pre-Oct 2019 Papers -->
636 <tr>
637 <td>Evaluation formats</td>
638 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2186.pdf">N2186</a></td>
639 <td class="unknown" align="center">Unknown</td>
640 </tr>
641 <tr>
642 <td>Clarifying the restrict Keyword v2</td>
643 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2260.pdf">N2660</a></td>
644 <td class="unknown" align="center">Unknown</td>
645 </tr>
646 <tr>
647 <td>Harmonizing static_assert with C++</td>
648 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2265.pdf">N2665</a></td>
649 <td class="full" align="center">Clang 9</td>
650 </tr>
651 <tr>
652 <td>nodiscard attribute</td>
653 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2267.pdf">N2267</a></td>
654 <td class="full" align="center">Clang 9</td>
655 </tr>
656 <tr>
657 <td>maybe_unused attribute</td>
658 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2270.pdf">N2270</a></td>
659 <td class="full" align="center">Clang 9</td>
660 </tr>
661 <tr id="TS18661">
662 <td rowspan="6">TS 18661 Integration</td>
663 </tr>
664 <tr> <!-- Pre-Oct 2019 -->
665 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2314.pdf">N2314</a></td>
666 <td class="unknown" align="center">Unknown</td>
667 </tr>
668 <tr> <!-- Pre-Oct 2019 -->
669 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2341.pdf">N2341</a></td>
670 <td class="unknown" align="center">Unknown</td>
671 </tr>
672 <tr> <!-- Pre-Oct 2019 -->
673 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2401.pdf">N2401</a></td>
674 <td class="unknown" align="center">Unknown</td>
675 </tr>
676 <tr> <!-- Pre-Oct 2019 -->
677 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2359.pdf">N2359</a></td>
678 <td class="unknown" align="center">Unknown</td>
679 </tr>
680 <tr> <!-- Nov 2020 -->
681 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2546.pdf">N2546</a></td>
682 <td class="unknown" align="center">Unknown</td>
683 </tr>
684 <tr>
685 <td>Preprocessor line numbers unspecified</td>
686 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2322.htm">N2322</a></td>
687 <td class="full" align="center">Yes</td>
688 </tr>
689 <tr>
690 <td>deprecated attribute</td>
691 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2334.pdf">N2334</a></td>
692 <td class="full" align="center">Clang 9</td>
693 </tr>
694 <tr id="Attributes">
695 <td rowspan="3">Attributes</td>
696 </tr>
697 <tr> <!-- Pre-Oct 2019 -->
698 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2335.pdf">N2335</a></td>
699 <td class="full" align="center">Clang 9</td>
700 </tr>
701 <tr> <!-- Aug 2020 -->
702 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2554.pdf">N2554</a></td>
703 <td class="full" align="center">Clang 9</td>
704 </tr>
705 <tr>
706 <td>Defining new types in offsetof</td>
707 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm">N2350</a></td>
708 <td class="full" align="center">Yes</td>
709 </tr>
710 <tr>
711 <td>fallthrough attribute</td>
712 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2408.pdf">N2408</a></td>
713 <td class="full" align="center">Clang 9</td>
714 </tr>
715 <tr>
716 <td>Two's complement sign representation</td>
717 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2412.pdf">N2412</a></td>
718 <td class="full" align="center">Clang 14</td>
719 </tr>
720 <tr>
721 <td>Adding the u8 character prefix</td>
722 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2418.pdf">N2418</a></td>
723 <td class="unreleased" align="center">Clang 15</td>
724 </tr>
725 <tr>
726 <td>Remove support for function definitions with identifier lists</td>
727 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2432.pdf">N2432</a></td>
728 <td class="unreleased" align="center">Clang 15</td>
729 </tr>
730 <!-- Oct 2019 Papers -->
731 <tr>
732 <td>*_IS_IEC_60559 feature test macros</td>
733 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2379.htm">N2379</a></td>
734 <td class="unknown" align="center">Unknown</td>
735 </tr>
736 <tr>
737 <td>Floating-point negation and conversion</td>
738 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2416.pdf">N2416</a></td>
739 <td class="unknown" align="center">Unknown</td>
740 </tr>
741 <tr>
742 <td>Annex F.8 update for implementation extensions and rounding</td>
743 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2384.pdf">N2384</a></td>
744 <td class="unknown" align="center">Unknown</td>
745 </tr>
746 <tr>
747 <td>_Bool definitions for true and false</td>
748 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2393.pdf">N2393</a></td>
749 <td class="na" align="center">Subsumed by N2935</td>
750 </tr>
751 <!-- Mar 2020 Papers -->
752 <tr>
753 <td>[[nodiscard("should have a reason")]]</td>
754 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2448.pdf">N2448</a></td>
755 <td class="full" align="center">Clang 10</td>
756 </tr>
757 <tr>
758 <td>Allowing unnamed parameters in function definitions</td>
759 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2480.pdf">N2480</a></td>
760 <td class="full" align="center">Clang 11</td>
761 </tr>
762 <!-- Aug 2020 Papers -->
763 <tr>
764 <td>Free positioning of labels inside compound statements</td>
765 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2508.pdf">N2508</a></td>
766 <td class="none" align="center">No</td>
767 </tr>
768 <tr>
769 <td>Clarification request for C17 example of undefined behavior</td>
770 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2517.pdf">N2517</a></td>
771 <td class="none" align="center">No</td>
772 </tr>
773 <tr>
774 <td>Querying attribute support</td>
775 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2553.pdf">N2553</a></td>
776 <td class="full" align="center">Clang 9</td>
777 </tr>
778 <!-- Nov 2020 Papers -->
779 <tr>
780 <td>Binary literals</td>
781 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2549.pdf">N2549</a></td>
782 <td class="full" align="center">Clang 9</td>
783 </tr>
784 <tr>
785 <td>Allow duplicate attributes</td>
786 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2557.pdf">N2557</a></td>
787 <td class="full" align="center">Clang 13</td>
788 </tr>
789 <tr>
790 <td>Character encoding of diagnostic text</td>
791 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2563.pdf">N2563</a></td>
792 <td class="full" align="center">Yes</td>
793 </tr>
794 <tr>
795 <td>What we think we reserve</td>
796 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2572.pdf">N2572</a></td>
797 <td class="partial" align="center">Partial</td>
798 </tr>
799 <tr>
800 <td>Decimal floating-point triples</td>
801 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2580.htm">N2580</a></td>
802 <td class="unknown" align="center">Unknown</td>
803 </tr>
804 <tr>
805 <td>Remove mixed wide string literal concatenation</td>
806 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2594.htm">N2594</a></td>
807 <td class="full" align="center">Clang 9</td>
808 </tr>
809 <tr>
810 <td>Update to IEC 60559:2020</td>
811 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2600.pdf">N2600</a></td>
812 <td class="unknown" align="center">Unknown</td>
813 </tr>
814 <tr>
815 <td>Compatibility of Pointers to Arrays with Qualifiers</td>
816 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2607.pdf">N2607</a></td>
817 <td class="partial" align="center">Partial</td>
818 </tr>
819 <tr>
820 <td>Unclear type relationship between a format specifier and its argument</td>
821 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2562.pdf">N2562</a></td>
822 <td class="partial" align="center">
823 <details><summary>Partial</summary>
824 Clang supports diagnostics checking format specifier validity, but
825 does not yet account for all of the changes in this paper, especially
826 regarding length modifiers like <code>h</code> and <code>hh</code>.
827 </details>
828 </td>
829 </tr>
830 <!-- Apr 2021 Papers -->
831 <tr>
832 <td>String functions for freestanding implementations</td>
833 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2524.htm">N2524</a></td>
834 <td class="none" align="center">No</td>
835 </tr>
836 <tr>
837 <td>Digit separators</td>
838 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2626.pdf">N2626</a></td>
839 <td class="full" align="center">Clang 13</td>
840 </tr>
841 <tr>
842 <td>Missing DEC_EVAL_METHOD</td>
843 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2640.htm">N2640</a></td>
844 <td class="unknown" align="center">Unknown</td>
845 </tr>
846 <tr>
847 <td>Missing +(x) in table</td>
848 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2641.htm">N2641</a></td>
849 <td class="unknown" align="center">Unknown</td>
850 </tr>
851 <tr>
852 <td>Add support for preprocessing directives elifdef and elifndef</td>
853 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2645.pdf">N2645</a></td>
854 <td class="full" align="center">Clang 13</td>
855 </tr>
856 <!-- Jun 2021 Papers -->
857 <tr>
858 <td>[[maybe_unused]] for labels</td>
859 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2662.pdf">N2662</a></td>
860 <td class="none" align="center">No</td>
861 </tr>
862 <tr>
863 <td>Zeros compare equal</td>
864 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2670.pdf">N2670</a></td>
865 <td class="unknown" align="center">Unknown</td>
866 </tr>
867 <tr>
868 <td>Negative values</td>
869 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2671.pdf">N2671</a></td>
870 <td class="full" align="center">Yes</td>
871 </tr>
872 <tr>
873 <td>5.2.4.2.2 cleanup</td>
874 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2672.pdf">N2672</a></td>
875 <td class="full" align="center">Yes</td>
876 </tr>
877 <tr id="_BitInt">
878 <td rowspan="5">Adding Fundamental Type for N-bit Integers</td>
879 </tr>
880 <tr> <!-- Jun 2021 -->
881 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2763.pdf">N2763</a></td>
882 <td class="unreleased" align="center">Clang 15</td>
883 </tr>
884 <tr> <!-- Feb 2022 -->
885 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2775.pdf">N2775</a></td>
886 <td class="unreleased" align="center">Clang 15</td>
887 </tr>
888 <tr> <!-- Jul 2022 -->
889 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2969.htm">N2969</a></td>
890 <td class="full" align="center">Clang 15</td>
891 </tr>
892 <tr> <!-- Jul 2022 -->
893 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3035.pdf">N3035</a></td>
894 <td class="unknown" align="center">Unknown</td>
895 </tr>
896 <!-- Sep 2021 Papers -->
897 <tr>
898 <td>#warning directive</td>
899 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2686.pdf">N2686</a></td>
900 <td class="full" align="center">Yes</td>
901 </tr>
902 <tr>
903 <td>Sterile characters</td>
904 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2688.pdf">N2686</a></td>
905 <td class="full" align="center">Yes</td>
906 </tr>
907 <tr>
908 <td>Integer constant expressions</td>
909 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2713.htm">N2713</a></td>
910 <td class="none" align="center">No</td>
911 </tr>
912 <tr>
913 <td>Numerically equal</td>
914 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2716.htm">N2716</a></td>
915 <td class="unknown" align="center">Unknown</td>
916 </tr>
917 <tr>
918 <td>char16_t & char32_t string literals shall be UTF-16 & UTF-32</td>
919 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2728.htm">N2728</a></td>
920 <td class="unknown" align="center">Unknown</td>
921 </tr>
922 <tr>
923 <td>IEC 60559 binding</td>
924 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2749.pdf">N2749</a></td>
925 <td class="unknown" align="center">Unknown</td>
926 </tr>
927 <tr>
928 <td>Static initialization of DFP zeros</td>
929 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2755.htm">N2755</a></td>
930 <td class="unknown" align="center">Unknown</td>
931 </tr>
932 <tr>
933 <td>__has_include for C</td>
934 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2799.pdf">N2799</a></td>
935 <td class="full" align="center">Yes</td>
936 </tr>
937 <!-- Dec 2021 Papers -->
938 <tr>
939 <td>Annex F overflow and underflow</td>
940 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2747.pdf">N2747</a></td>
941 <td class="full" align="center">Yes</td>
942 </tr>
943 <tr>
944 <td>Remove UB from Incomplete Types in Function Parameters</td>
945 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2770.pdf">N2770</a></td>
946 <td class="full" align="center">Yes</td>
947 </tr>
948 <tr>
949 <td>Variably-modified types</td>
950 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2778.pdf">N2778</a></td>
951 <td class="full" align="center">Yes</td>
952 </tr>
953 <tr>
954 <td>Types do not have types</td>
955 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2781.pdf">N2781</a></td>
956 <td class="full" align="center">Yes</td>
957 </tr>
958 <tr>
959 <td>5.2.4.2.2 cleanup (N2672 update)</td>
960 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2806.pdf">N2806</a></td>
961 <td class="full" align="center">Yes</td>
962 </tr>
963 <tr>
964 <td>Allow 16-bit ptrdiff_t</td>
965 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2808.htm">N2808</a></td>
966 <td class="full" align="center">Yes</td>
967 </tr>
968 <tr>
969 <td>Proposal to update CFP freestanding requirements</td>
970 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2823.pdf">N2823</a></td>
971 <td class="unknown" align="center">Unknown</td>
972 </tr>
973 <tr>
974 <td>Types and sizes</td>
975 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2838.htm">N2838</a></td>
976 <td class="unknown" align="center">Unknown</td>
977 </tr>
978 <tr>
979 <td>Clarifying integer terms</td>
980 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2837.pdf">N2837</a></td>
981 <td class="full" align="center">Yes</td>
982 </tr>
983 <tr>
984 <td>Clarification for max exponent macros</td>
985 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2843.pdf">N2843</a></td>
986 <td class="unknown" align="center">Unknown</td>
987 </tr>
988 <tr>
989 <td>Clarification about expression transformations</td>
990 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2846.pdf">N2846</a></td>
991 <td class="unknown" align="center">Unknown</td>
992 </tr>
993 <tr>
994 <td>Contradiction about INFINITY macro</td>
995 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2848.pdf">N2848</a></td>
996 <td class="unknown" align="center">Unknown</td>
997 </tr>
998 <tr>
999 <td>Require exact-width integer type interfaces</td>
1000 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2872.htm">N2872</a></td>
1001 <td class="full" align="center">Yes</td>
1002 </tr>
1003 <!-- Feb 2022 (Parts 1 & 2) Papers -->
1004 <tr>
1005 <td>@, $, and ‘ in the source/execution character set</td>
1006 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2701.htm">N2701</a></td>
1007 <td class="full" align="center">Yes</td>
1008 </tr>
1009 <tr>
1010 <td>Quantum exponent of NaN (version 2)</td>
1011 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2754.htm">N2754</a></td>
1012 <td class="unknown" align="center">Unknown</td>
1013 </tr>
1014 <tr>
1015 <td>The noreturn attribute</td>
1016 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2764.pdf">N2764</a></td>
1017 <td class="unreleased" align="center">Clang 15</td>
1018 </tr>
1019 <tr>
1020 <td>*_HAS_SUBNORM==0 implies what?</td>
1021 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2797.htm">N2797</a></td>
1022 <td class="full" align="center">Yes</td>
1023 </tr>
1024 <tr>
1025 <td>Disambiguate the storage class of some compound literals</td>
1026 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2819.pdf">N2819</a></td>
1027 <td class="unknown" align="center">Unknown</td>
1028 </tr>
1029 <tr>
1030 <td>Add annotations for unreachable control flow v2</td>
1031 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2826.pdf">N2826</a></td>
1032 <td class="none" align="center">No</td>
1033 </tr>
1034 <tr>
1035 <td>Unicode Sequences More Than 21 Bits are a Constraint Violation r0</td>
1036 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2828.htm">N2828</a></td>
1037 <td class="full" align="center">Clang 3.6</td>
1038 </tr>
1039 <tr>
1040 <td>Make assert() macro user friendly for C and C++ v2</td>
1041 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2829.htm">N2829</a></td>
1042 <td class="none" align="center">No</td>
1043 </tr>
1044 <tr>
1045 <td>Identifier Syntax using Unicode Standard Annex 31</td>
1046 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2836.pdf">N2836</a></td>
1047 <td class="unreleased" align="center">Clang 15</td>
1048 </tr>
1049 <tr>
1050 <td>No function declarators without prototypes</td>
1051 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2841.htm">N2841</a></td>
1052 <td class="unreleased" align="center">Clang 15</td>
1053 </tr>
1054 <tr>
1055 <td>Remove default argument promotions for _FloatN types</td>
1056 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2844.pdf">N2844</a></td>
1057 <td class="unknown" align="center">Unknown</td>
1058 </tr>
1059 <tr>
1060 <td>Revised Suggestions of Change for Numerically Equal/Equivalent</td>
1061 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2847.pdf">N2847</a></td>
1062 <td class="unknown" align="center">Unknown</td>
1063 </tr>
1064 <tr>
1065 <td>5.2.4.2.2 Cleanup, Again Again (N2806 update)</td>
1066 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2879.pdf">N2879</a></td>
1067 <td class="full" align="center">Yes</td>
1068 </tr>
1069 <tr>
1070 <td>char8_t: A type for UTF-8 characters and strings</td>
1071 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2653.htm">N2653</a></td>
1072 <td class="none" align="center">No</td>
1073 </tr>
1074 <tr>
1075 <td>Clarification for max exponent macros-update</td>
1076 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2882.pdf">N2882</a></td>
1077 <td class="unknown" align="center">Unknown</td>
1078 </tr>
1079 <tr id="InitializationWithCurlyBraces">
1080 <td rowspan="3">Consistent, Warningless, and Intuitive Initialization with {}</td>
1081 </tr>
1082 <tr> <!-- Feb 2022 -->
1083 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2900.htm">N2900</a></td>
1084 <td class="unknown" align="center">Unknown</td>
1085 </tr>
1086 <tr> <!-- Jul 2022 -->
1087 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3011.htm">N3011</a></td>
1088 <td class="unknown" align="center">Unknown</td>
1089 </tr>
1090 <tr id="typeof">
1091 <td rowspan="3">Not-so-magic: typeof</td>
1092 </tr>
1093 <tr> <!-- Feb 2022 -->
1094 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2927.htm">N2927</a></td>
1095 <td class="partial" align="center">
1096 <details><summary>Partial</summary>
1097 Clang supports <code>typeof</code> in GNU standards mode, but its
1098 compatibility with this proposal is unknown. Also, Clang does not yet
1099 support remove_quals.
1100 </details>
1101 </td>
1102 </tr>
1103 <tr> <!-- Jul 2022 -->
1104 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2930.pdf">N2930</a></td>
1105 <td class="none" align="center">No</td>
1106 </tr>
1107 <tr>
1108 <td>Type annex tgmath narrowing macros with integer args v2</td>
1109 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2931.pdf">N2931</a></td>
1110 <td class="unknown" align="center">Unknown</td>
1111 </tr>
1112 <tr>
1113 <td>Revise spelling of keywords v7</td>
1114 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2934.pdf">N2934</a></td>
1115 <td class="none" align="center">No</td>
1116 </tr>
1117 <tr>
1118 <td>Make false and true first-class language features v8</td>
1119 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2935.pdf">N2935</a></td>
1120 <td class="unreleased" align="center">Clang 15</td>
1121 </tr>
1122 <tr>
1123 <td>Properly define blocks as part of the grammar v3</td>
1124 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2937.pdf">N2937</a></td>
1125 <td class="full" align="center">Yes</td>
1126 </tr>
1127 <!-- May 2022 Papers -->
1128 <tr>
1129 <td>Annex X (replacing Annex H) for IEC 60559 interchange</td>
1130 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2601.pdf">N2601</a></td>
1131 <td class="none" align="center">No</td>
1132 </tr>
1133 <tr>
1134 <td>Indeterminate Values and Trap Representations</td>
1135 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2861.pdf">N2861</a></td>
1136 <td class="full" align="center">Yes</td>
1137 </tr>
1138 <tr>
1139 <td>Remove ATOMIC_VAR_INIT v2</td>
1140 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2886.htm">N2886</a></td>
1141 <td class="none" align="center">No</td>
1142 </tr>
1143 <tr>
1144 <td>Require exact-width integer type interfaces v2</td>
1145 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2888.htm">N2888</a></td>
1146 <td class="full" align="center">Yes</td>
1147 </tr>
1148 <tr>
1149 <td>Wording Change for Variably-Modified Types</td>
1150 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2992.pdf">N2992</a></td>
1151 <td class="full" align="center">Yes</td>
1152 </tr>
1153 <!-- Jul 2022 Papers -->
1154 <tr>
1155 <td>Identifier syntax fixes</td>
1156 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2939.pdf">N2939</a></td>
1157 <td class="unknown" align="center">Unknown</td>
1158 </tr>
1159 <tr>
1160 <td>Remove trigraphs??!</td>
1161 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2940.pdf">N2940</a></td>
1162 <td class="full" align="center">Yes</td>
1163 </tr>
1164 <tr>
1165 <td>Improved normal enumerations</td>
1166 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3029.htm">N3029</a></td>
1167 <td class="unknown" align="center">Unknown</td>
1168 </tr>
1169 <tr>
1170 <td>Relax requirements for va_start</td>
1171 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2975.pdf">N2975</a></td>
1172 <td class="none" align="center">No</td>
1173 </tr>
1174 <tr>
1175 <td>Enhanced enumerations</td>
1176 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3030.htm">N3030</a></td>
1177 <td class="unknown" align="center">Unknown</td>
1178 </tr>
1179 <tr>
1180 <td>Freestanding C and IEC 60559 conformance scope reduction</td>
1181 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2951.htm">N2951</a></td>
1182 <td class="unknown" align="center">Unknown</td>
1183 </tr>
1184 <tr>
1185 <td>Unsequenced functions</td>
1186 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2956.htm">N2956</a></td>
1187 <td class="none" align="center">No</td>
1188 </tr>
1189 <tr>
1190 <td>Comma ommission and deletion (__VA_OPT__)</td>
1191 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3033.htm">N3033</a></td>
1192 <td class="unknown" align="center">Unknown</td>
1193 </tr>
1194 <tr>
1195 <td>Underspecified object definitions</td>
1196 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3006.htm">N3006</a></td>
1197 <td class="unknown" align="center">Unknown</td>
1198 </tr>
1199 <tr>
1200 <td>Type inference for object declarations</td>
1201 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3007.htm">N3007</a></td>
1202 <td class="none" align="center">No</td>
1203 </tr>
1204 <tr>
1205 <td>constexpr for object definitions</td>
1206 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3018.htm">N3018</a></td>
1207 <td class="none" align="center">No</td>
1208 </tr>
1209 <tr>
1210 <td>Introduce storage class specifiers for compound literals</td>
1211 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3038.htm">N3038</a></td>
1212 <td class="none" align="center">No</td>
1213 </tr>
1214 <tr>
1215 <td>Identifier primary expressions</td>
1216 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3034.pdf">N3034</a></td>
1217 <td class="full" align="center">Yes</td>
1218 </tr>
1219 <tr>
1220 <td>Introduce the nullptr constant</td>
1221 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3042.htm">N3042</a></td>
1222 <td class="none" align="center">No</td>
1223 </tr>
1224 <tr>
1225 <td>Memory layout of unions</td>
1226 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2929.pdf">N2929</a></td>
1227 <td class="full" align="center">Yes</td>
1228 </tr>
1229 <tr>
1230 <td>Improved tag compatibility</td>
1231 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3037.pdf">N3037</a></td>
1232 <td class="none" align="center">No</td>
1233 </tr>
1234 <tr>
1235 <td>#embed</td>
1236 <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3017.htm">N3017</a></td>
1237 <td class="none" align="center">No</td>
1238 </tr>
1239 </table>
1240 </details>
1242 </div>
1243 </body>
1244 </html>