| 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 |