OLD | NEW |
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" | 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" |
2 "http://www.w3.org/TR/html4/strict.dtd"> | 2 "http://www.w3.org/TR/html4/strict.dtd"> |
3 <html> | 3 <html> |
4 <head> | 4 <head> |
5 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | 5 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
6 <title>Clang - C++98, C++11, and C++14 Status</title> | 6 <title>Clang - C++98 and C++11 Status</title> |
7 <link type="text/css" rel="stylesheet" href="menu.css"> | 7 <link type="text/css" rel="stylesheet" href="menu.css"> |
8 <link type="text/css" rel="stylesheet" href="content.css"> | 8 <link type="text/css" rel="stylesheet" href="content.css"> |
9 <style type="text/css"> | 9 <style type="text/css"> |
10 .none { background-color: #FFCCCC } | 10 .none { background-color: #FFCCCC } |
11 .partial { background-color: #FFE0B0 } | 11 .partial { background-color: #FFE0B0 } |
12 .svn { background-color: #FFFF99 } | 12 .svn { background-color: #FFFF99 } |
13 .full { background-color: #CCFF99 } | 13 .full { background-color: #CCFF99 } |
14 .na { background-color: #DDDDDD } | 14 .na { background-color: #DDDDDD } |
15 span:target { background-color: #FFFFBB; outline: #DDDD55 solid thin; } | 15 span:target { background-color: #FFFFBB; outline: #DDDD55 solid thin; } |
16 th { background-color: #FFDDAA } | 16 th { background-color: #FFDDAA } |
17 </style> | 17 </style> |
18 </head> | 18 </head> |
19 <body> | 19 <body> |
20 | 20 |
21 <!--#include virtual="menu.html.incl"--> | 21 <!--#include virtual="menu.html.incl"--> |
22 | 22 |
23 <div id="content"> | 23 <div id="content"> |
24 | 24 |
25 <!--*************************************************************************--> | 25 <!--*************************************************************************--> |
26 <h1>C++98, C++11, and C++14 Support in Clang</h1> | 26 <h1>C++98, C++11, and C++14 Support in Clang</h1> |
27 <!--*************************************************************************--> | 27 <!--*************************************************************************--> |
28 <p>Last updated: $Date$</p> | 28 <p>Last updated: $Date$</p> |
29 | 29 |
30 <h2 id="cxx98">C++98 implementation status</h2> | 30 <h2 id="cxx98">C++98 implementation status</h2> |
31 | 31 |
32 <p>Clang currently implements all of the ISO C++ 1998 standard | 32 <p>Clang currently implements all of the ISO C++ 1998 standard |
33 (including the defects addressed in the ISO C++ 2003 standard) | 33 (including the defects addressed in the ISO C++ 2003 standard) |
34 except for <tt>export</tt> (which has been removed in C++11) | 34 except for 'export' (which has been removed in C++11) |
35 and is considered a production-quality C++ compiler. The <a | 35 and is considered a production-quality C++ compiler. The <a |
36 href="http://llvm.org/bugs/">LLVM bug tracker</a> contains a Clang | 36 href="http://llvm.org/bugs/">LLVM bug tracker</a> contains a Clang |
37 C++ component that tracks known Clang C++ bugs.</p> | 37 C++ component that tracks known Clang C++ bugs.</p> |
38 | 38 |
39 <h2 id="cxx11">C++11 implementation status</h2> | 39 <h2 id="cxx11">C++11 implementation status</h2> |
40 | 40 |
41 <p>Clang implements all of the <a | 41 <p>Clang implements all of the <a |
42 href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm
?csnumber=50372">ISO | 42 href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm
?csnumber=50372">ISO |
43 C++ 2011 standard</a>. The following table describes the Clang version | 43 C++ 2011 standard</a>. The following table describes the Clang version |
44 in which each feature became available.</p> | 44 in which each feature became available.</p> |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 </tr> | 172 </tr> |
173 <tr> | 173 <tr> |
174 <td>Forward declarations for enums</td> | 174 <td>Forward declarations for enums</td> |
175 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764
.pdf">N2764</a> | 175 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764
.pdf">N2764</a> |
176 <br><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#
1206">DR1206</a></td> | 176 <br><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#
1206">DR1206</a></td> |
177 <td class="full" align="center">Clang 3.1</td> | 177 <td class="full" align="center">Clang 3.1</td> |
178 </tr> | 178 </tr> |
179 <tr> | 179 <tr> |
180 <td>Generalized attributes</td> | 180 <td>Generalized attributes</td> |
181 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761
.pdf">N2761</a></td> | 181 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761
.pdf">N2761</a></td> |
182 <td class="svn" align="center">Clang 3.3 <a href="#n2761">(1)</a></td> | 182 <td class="svn" align="center">SVN <a href="#n2761">(1)</a></td> |
183 </tr> | 183 </tr> |
184 <tr> | 184 <tr> |
185 <td>Generalized constant expressions</td> | 185 <td>Generalized constant expressions</td> |
186 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235
.pdf">N2235</a></td> | 186 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235
.pdf">N2235</a></td> |
187 <td class="full" align="center">Clang 3.1</td> | 187 <td class="full" align="center">Clang 3.1</td> |
188 </tr> | 188 </tr> |
189 <tr> | 189 <tr> |
190 <td>Alignment support</td> | 190 <td>Alignment support</td> |
191 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341
.pdf">N2341</a></td> | 191 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341
.pdf">N2341</a></td> |
192 <td class="svn" align="center">Clang 3.3</td> | 192 <td class="svn" align="center">SVN</td> |
193 </tr> | 193 </tr> |
194 <!-- Skipped N1627: Conditionally-support behavior --> | 194 <!-- Skipped N1627: Conditionally-support behavior --> |
195 <!-- Skipped N1727: Changing Undefined Behavior into Diagnosable Errors --> | 195 <!-- Skipped N1727: Changing Undefined Behavior into Diagnosable Errors --> |
196 <tr> | 196 <tr> |
197 <td>Delegating constructors</td> | 197 <td>Delegating constructors</td> |
198 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986
.pdf">N1986</a></td> | 198 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986
.pdf">N1986</a></td> |
199 <td class="full" align="center">Clang 3.0</td> | 199 <td class="full" align="center">Clang 3.0</td> |
200 </tr> | 200 </tr> |
201 <tr> | 201 <tr> |
202 <td>Inheriting constructors</td> | 202 <td>Inheriting constructors</td> |
203 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540
.htm">N2540</a></td> | 203 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540
.htm">N2540</a></td> |
204 <td class="svn" align="center">Clang 3.3</td> | 204 <td class="svn" align="center">SVN</td> |
205 </tr> | 205 </tr> |
206 <tr> | 206 <tr> |
207 <td>Explicit conversion operators</td> | 207 <td>Explicit conversion operators</td> |
208 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437
.pdf">N2437</a></td> | 208 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437
.pdf">N2437</a></td> |
209 <td class="full" align="center">Clang 3.0</td> | 209 <td class="full" align="center">Clang 3.0</td> |
210 </tr> | 210 </tr> |
211 <tr> | 211 <tr> |
212 <td>New character types</td> | 212 <td>New character types</td> |
213 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249
.html">N2249</a></td> | 213 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249
.html">N2249</a></td> |
214 <td class="full" align="center">Clang 2.9</td> | 214 <td class="full" align="center">Clang 2.9</td> |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053
.html">N3053</a></td> | 301 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053
.html">N3053</a></td> |
302 <td class="full" align="center">Clang 3.0</td> | 302 <td class="full" align="center">Clang 3.0</td> |
303 </tr> | 303 </tr> |
304 | 304 |
305 <tr class="separator"> | 305 <tr class="separator"> |
306 <th align="center" colspan="3">Concurrency</th> | 306 <th align="center" colspan="3">Concurrency</th> |
307 </tr> | 307 </tr> |
308 <tr> | 308 <tr> |
309 <td>Sequence points</td> | 309 <td>Sequence points</td> |
310 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239
.html">N2239</a></td> | 310 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239
.html">N2239</a></td> |
311 <td class="svn" align="center">Clang 3.3</td> | 311 <td class="svn" align="center">SVN</td> |
312 </tr> | 312 </tr> |
313 <tr> | 313 <tr> |
314 <td>Atomic operations</td> | 314 <td>Atomic operations</td> |
315 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427
.html">N2427</a></td> | 315 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427
.html">N2427</a></td> |
316 <td class="full" align="center">Clang 3.1</td> | 316 <td class="full" align="center">Clang 3.1</td> |
317 </tr> | 317 </tr> |
318 <tr> | 318 <tr> |
319 <td>Strong Compare and Exchange</td> | 319 <td>Strong Compare and Exchange</td> |
320 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2748
.html">N2748</a></td> | 320 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2748
.html">N2748</a></td> |
321 <td class="full" align="center">Clang 3.1 <a href="#n2748">(2)</a></td> | 321 <td class="full" align="center">Clang 3.1 <a href="#n2748">(2)</a></td> |
(...skipping 25 matching lines...) Expand all Loading... |
347 <td class="na" align="center">N/A</td> | 347 <td class="na" align="center">N/A</td> |
348 </tr> | 348 </tr> |
349 <tr> | 349 <tr> |
350 <td>Allow atomics use in signal handlers</td> | 350 <td>Allow atomics use in signal handlers</td> |
351 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547
.htm">N2547</a></td> | 351 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547
.htm">N2547</a></td> |
352 <td class="full" align="center">Clang 3.1</td> | 352 <td class="full" align="center">Clang 3.1</td> |
353 </tr> | 353 </tr> |
354 <tr> | 354 <tr> |
355 <td>Thread-local storage</td> | 355 <td>Thread-local storage</td> |
356 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659
.htm">N2659</a></td> | 356 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659
.htm">N2659</a></td> |
357 <td class="svn" align="center">Clang 3.3</td> | 357 <td class="svn" align="center">SVN</td> |
358 </tr> | 358 </tr> |
359 <tr> | 359 <tr> |
360 <td>Dynamic initialization and destruction with concurrency</td> | 360 <td>Dynamic initialization and destruction with concurrency</td> |
361 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660
.htm">N2660</a></td> | 361 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660
.htm">N2660</a></td> |
362 <td class="full" align="center">Clang 2.9</td> | 362 <td class="full" align="center">Clang 2.9</td> |
363 </tr> | 363 </tr> |
364 | 364 |
365 <tr class="separator"> | 365 <tr class="separator"> |
366 <th align="center" colspan="3">C99 Features in C++11</th> | 366 <th align="center" colspan="3">C99 Features in C++11</th> |
367 </tr> | 367 </tr> |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 ABI-incompatible change.</span> | 399 ABI-incompatible change.</span> |
400 </p> | 400 </p> |
401 | 401 |
402 <h2 id="cxx14">C++1y implementation status</h2> | 402 <h2 id="cxx14">C++1y implementation status</h2> |
403 | 403 |
404 <p>Clang is introducing support for the upcoming C++ language standard, | 404 <p>Clang is introducing support for the upcoming C++ language standard, |
405 provisionally named C++1y. The following table describes which C++1y features | 405 provisionally named C++1y. The following table describes which C++1y features |
406 have been implemented in Clang and in which Clang version they became | 406 have been implemented in Clang and in which Clang version they became |
407 available.</p> | 407 available.</p> |
408 | 408 |
409 <p>You can use Clang in C++1y mode with the <code>-std=c++1y</code> option.</p> | 409 <p>Note: many of the links to papers here will not work until the |
| 410 ISO/IEC JTC1/SC22/WG21 post-Bristol mailing ships.</p> |
410 | 411 |
411 <table width="689" border="1" cellspacing="0"> | 412 <table width="689" border="1" cellspacing="0"> |
412 <tr> | 413 <tr> |
413 <th>Language Feature</th> | 414 <th>Language Feature</th> |
414 <th>C++1y Proposal</th> | 415 <th>C++1y Proposal</th> |
415 <th>Available in Clang?</th> | 416 <th>Available in Clang?</th> |
416 </tr> | 417 </tr> |
417 <tr> | 418 <tr> |
418 <td>Tweak to certain C++ contextual conversions</td> | 419 <td>Tweak to certain C++ contextual conversions</td> |
419 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3323
.pdf">N3323</a></td> | 420 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3323
.pdf">N3323</a></td> |
420 <td class="none" align="center">No</td> | 421 <td class="none" align="center">No</td> |
421 </tr> | 422 </tr> |
422 <tr> | 423 <tr> |
423 <td>Binary literals</td> | 424 <td>Binary literals</td> |
424 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472
.pdf">N3472</a></td> | 425 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472
.pdf">N3472</a></td> |
425 <td class="full" align="center">Yes</td> | 426 <td class="full" align="center">Yes</td> |
426 </tr> | 427 </tr> |
427 <tr> | 428 <tr> |
428 <td>decltype(auto)</td> | 429 <td>decltype(auto)</td> |
429 <td rowspan=2 style="vertical-align:middle"><a href="http://isocpp.org/fil
es/papers/N3638.html">N3638</a></td> | 430 <td rowspan=2 style="vertical-align:middle"><a href="http://www.open-std.o
rg/jtc1/sc22/wg21/docs/papers/2013/n3638.html">N3638</a></td> |
430 <td class="svn" align="center">Clang 3.3</td> | 431 <td class="svn" align="center">SVN</td> |
431 </tr> | 432 </tr> |
432 <tr> | 433 <tr> |
433 <td>Return type deduction for normal functions</td> | 434 <td>Return type deduction for normal functions</td> |
434 <td class="partial" align="center">Partial</td> | 435 <td class="partial" align="center">Partial</td> |
435 </tr> | 436 </tr> |
436 <tr> | 437 <tr> |
437 <td>Runtime-sized arrays with automatic storage duration</td> | 438 <td>Runtime-sized arrays with automatic storage duration</td> |
438 <td><a href="http://isocpp.org/files/papers/N3639.html">N3639</a></td> | 439 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639
.html">N3639</a></td> |
439 <td class="partial" align="center">Partial</td> | 440 <td class="partial" align="center">Partial</td> |
440 </tr> | 441 </tr> |
441 <tr> | 442 <tr> |
442 <td>Initialized lambda captures</td> | 443 <td>Initialized lambda captures</td> |
443 <td><a href="http://isocpp.org/files/papers/N3648.html">N3648</a></td> | 444 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3648
.html">N3648</a></td> |
444 <td class="none" align="center">No</td> | 445 <td class="none" align="center">No</td> |
445 </tr> | 446 </tr> |
446 <tr> | 447 <tr> |
447 <td>Generic lambdas</td> | 448 <td>Generic lambdas</td> |
448 <td><a href="http://isocpp.org/files/papers/N3649.html">N3649</a></td> | 449 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3649
.html">N3649</a></td> |
449 <td class="partial" align="center"> | 450 <td class="partial" align="center"> |
450 No [<a href="https://github.com/faisalv/clang-glambda">WIP</a>]</td> | 451 No [<a href="https://github.com/faisalv/clang-glambda">WIP</a>]</td> |
451 </tr> | 452 </tr> |
452 <tr> | 453 <tr> |
453 <td>Variable templates</td> | 454 <td>Variable templates</td> |
454 <td><a href="http://isocpp.org/files/papers/N3651.pdf">N3651</a></td> | 455 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3651
.pdf">N3651</a></td> |
455 <td class="none" align="center">No</td> | 456 <td class="none" align="center">No</td> |
456 </tr> | 457 </tr> |
457 <tr> | 458 <tr> |
458 <td>Relaxing requirements on constexpr functions</td> | 459 <td>Relaxing requirements on constexpr functions</td> |
459 <td><a href="http://isocpp.org/files/papers/N3652.html">N3652</a></td> | 460 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652
.html">N3652</a></td> |
460 <td class="partial" align="center">Partial</td> | 461 <td class="partial" align="center">Partial</td> |
461 </tr> | 462 </tr> |
462 <tr> | 463 <tr> |
463 <td>Member initializers and aggregates</td> | 464 <td>Member initializers and aggregates</td> |
464 <td><a href="http://isocpp.org/files/papers/N3653.html">N3653</a></td> | 465 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3653
.html">N3653</a></td> |
465 <td class="svn" align="center">Clang 3.3</td> | 466 <td class="svn" align="center">SVN</td> |
466 </tr> | 467 </tr> |
467 <tr> | 468 <tr> |
468 <td>Clarifying memory allocation</td> | 469 <td>Clarifying memory allocation</td> |
469 <td><!--<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n
3664.html">-->N3664<!--</a>--></td> | 470 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3664
.html">N3664</a></td> |
470 <td class="full" align="center">Yes</td> | 471 <td class="full" align="center">Yes</td> |
471 </tr> | 472 </tr> |
472 </table> | 473 </table> |
473 | 474 |
474 </div> | 475 </div> |
475 </body> | 476 </body> |
476 </html> | 477 </html> |
OLD | NEW |