diff options
Diffstat (limited to 'www/cxx_status.html')
-rw-r--r-- | www/cxx_status.html | 169 |
1 files changed, 109 insertions, 60 deletions
diff --git a/www/cxx_status.html b/www/cxx_status.html index 70becc7dbf6b..c1dc78cf56b0 100644 --- a/www/cxx_status.html +++ b/www/cxx_status.html @@ -1,8 +1,7 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" - "http://www.w3.org/TR/html4/strict.dtd"> +<!DOCTYPE html> <html> <head> - <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Clang - C++1z, C++14, C++11 and C++98 Status</title> <link type="text/css" rel="stylesheet" href="menu.css"> <link type="text/css" rel="stylesheet" href="content.css"> @@ -26,13 +25,13 @@ <!--*************************************************************************--> <h1>C++ Support in Clang</h1> <!--*************************************************************************--> -<p>Last updated: $Date: 2016-07-14 02:14:59 +0200 (Thu, 14 Jul 2016) $</p> +<p>Last updated: $Date: 2016-12-31 22:41:23 +0100 (Sat, 31 Dec 2016) $</p> -<p>Clang fully implements all published ISO C++ standards including <a -href="#cxx11">C++11</a>, as well as the upcoming <a -href="#cxx14">C++14</a> standard, and some parts of the fledgling <a -href="#cxx17">C++1z</a> standard, -and is considered a production-quality C++ compiler. +<p>Clang fully implements all published ISO C++ standards (<a +href="#cxx98">C++98 / C++03</a>, <a +href="#cxx11">C++11</a>, and <a +href="#cxx14">C++14</a>), and most of the upcoming <a +href="#cxx17">C++1z</a> standard. <p>The Clang community is continually striving to improve C++ standards compliance between releases by submitting and tracking <a @@ -55,20 +54,17 @@ each language mode.</p> <h2 id="cxx11">C++11 implementation status</h2> - <p>Clang 3.3 and later implement all of the <a - href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372">ISO - C++ 2011 standard</a>. The following table describes the Clang version - in which each feature became available.</p> +<p>Clang 3.3 and later implement all of the <a + href="http://www.iso.org/iso/catalogue_detail.htm?csnumber=50372">ISO + C++ 2011 standard</a>. <p>By default, Clang builds C++ code according to the C++98 standard, with many C++11 features accepted as extensions. You can use Clang in C++11 mode with the <code>-std=c++11</code> option. Clang's C++11 mode can be used -with <a href="http://libcxx.llvm.org/">libc++</a> or with gcc's libstdc++, but -patches are needed to make <a href="libstdc++4.4-clang0x.patch">libstdc++-4.4</a> -work with Clang in C++11 mode. Patches are also needed to make -<a href="libstdc++4.6-clang11.patch">libstdc++-4.6</a> -and <a href="libstdc++4.7-clang11.patch">libstdc++-4.7</a> work with Clang -releases prior to version 3.2 in C++11 mode. +with <a href="http://libcxx.llvm.org/">libc++</a> or with gcc's libstdc++. + +<details> +<summary>List of features and minimum Clang version with support</summary> <table width="689" border="1" cellspacing="0"> <tr> @@ -425,18 +421,20 @@ such as Clang that does not provide any extended integer types. because changing <code>intmax_t</code> would be an ABI-incompatible change.</span> </p> +</details> <h2 id="cxx14">C++14 implementation status</h2> -<p>Clang 3.4 and later implement all of the Draft International Standard (see <a -href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pdf">most -recent publicly available draft</a>) -of the upcoming C++14 language standard. The following table describes the -Clang version in which each feature became available.</p> +<p>Clang 3.4 and later implement all of the <a + href="http://www.iso.org/iso/catalogue_detail.htm?csnumber=64029">ISO + C++ 2014 standard</a>. <p>You can use Clang in C++14 mode with the <code>-std=c++14</code> option (use <code>-std=c++1y</code> in Clang 3.4 and earlier).</p> +<details> +<summary>List of features and minimum Clang version with support</summary> + <table width="689" border="1" cellspacing="0"> <tr> <th>Language Feature</th> @@ -518,27 +516,27 @@ added these functions in version 5.0, and <code>libc++</code> added them in version 3.7. </span> </p> +</details> <h2 id="cxx17">C++1z implementation status</h2> <p>Clang has <b>experimental</b> support for some proposed features of the C++ standard following C++14, provisionally named C++1z. -The following table describes which C++1z features -have been implemented in Clang and in which Clang version they became -available.</p> - -<p>Note that support for these features may change or be removed without notice, -as the draft C++1z standard evolves.</p> +Note that support for these features may change or be removed without notice, +as the draft C++1z standard evolves. <p>You can use Clang in C++1z mode with the <code>-std=c++1z</code> option.</p> +<details open> +<summary>List of features and minimum Clang version with support</summary> + <table width="689" border="1" cellspacing="0"> <tr> <th>Language Feature</th> <th>C++1z Proposal</th> <th>Available in Clang?</th> </tr> - <!-- Issaquah papers --> + <!-- Issaquah 2014 papers --> <tr> <td><tt>static_assert</tt> with no message</td> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3928.pdf">N3928</a></td> @@ -578,7 +576,7 @@ as the draft C++1z standard evolves.</p> </tr> <tr> <!-- from Jacksonville --> <td><a href="http://wg21.link/p0036r0">P0036R0</a></td> - <td class="svn" align="center">SVN</td> + <td class="full" align="center">Clang 3.9</td> </tr> <tr> <td><tt>u8</tt> character literals</td> @@ -614,7 +612,7 @@ as the draft C++1z standard evolves.</p> <tr> <td>Make exception specifications part of the type system</td> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0012r1.html">P0012R1</a></td> - <td class="none" align="center">No</td> + <td class="svn" align="center">SVN</td> </tr> <tr> <td><tt>__has_include</tt> in preprocessor conditionals</td> @@ -624,28 +622,28 @@ as the draft C++1z standard evolves.</p> <tr> <td>New specification for inheriting constructors (<a href="cxx_dr_status.html#1941">DR1941</a> et al)</td> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0136r1.html">P0136R1</a></td> - <td class="svn" align="center">SVN <a href="#p0136">(9)</a></td> + <td class="full" align="center">Clang 3.9 <a href="#p0136">(9)</a></td> </tr> <!-- Jacksonville papers --> <tr> <td><tt>[[fallthrough]]</tt> attribute</td> <td><a href="http://wg21.link/p0188r1">P0188R1</a></td> - <td class="svn" align="center">SVN</td> + <td class="full" align="center">Clang 3.9</td> </tr> <tr> <td><tt>[[nodiscard]]</tt> attribute</td> <td><a href="http://wg21.link/p0189r1">P0189R1</a></td> - <td class="svn" align="center">SVN</td> + <td class="full" align="center">Clang 3.9</td> </tr> <tr> <td><tt>[[maybe_unused]]</tt> attribute</td> <td><a href="http://wg21.link/p0212r1">P0212R1</a></td> - <td class="svn" align="center">SVN</td> + <td class="full" align="center">Clang 3.9</td> </tr> <tr> <td>Aggregate initialization of classes with base classes</td> <td><a href="http://wg21.link/p0017r1">P0017R1</a></td> - <td class="svn" align="center">SVN</td> + <td class="full" align="center">Clang 3.9</td> </tr> <tr> <td><tt>constexpr</tt> lambda expressions</td> @@ -655,17 +653,17 @@ as the draft C++1z standard evolves.</p> <tr> <td>Differing <tt>begin</tt> and <tt>end</tt> types in range-based <tt>for</tt></td> <td><a href="http://wg21.link/p0184r0">P0184R0</a></td> - <td class="svn" align="center">SVN</td> + <td class="full" align="center">Clang 3.9</td> </tr> <tr> <td>Lambda capture of <tt>*this</tt></td> <td><a href="http://wg21.link/p0018r3">P0018R3</a></td> - <td class="svn" align="center">SVN</td> + <td class="full" align="center">Clang 3.9</td> </tr> <tr> <td>Direct-list-initialization of <tt>enum</tt>s</td> <td><a href="http://wg21.link/p0138r2">P0138R2</a></td> - <td class="svn" align="center">SVN</td> + <td class="full" align="center">Clang 3.9</td> </tr> <tr> <td>Hexadecimal floating-point literals</td> @@ -676,12 +674,12 @@ as the draft C++1z standard evolves.</p> <tr> <td>Using attribute namespaces without repetition</td> <td><a href="http://wg21.link/p0028r4">P0028R4</a></td> - <td class="svn" align="center">SVN</td> + <td class="full" align="center">Clang 3.9</td> </tr> <tr> <td>Dynamic memory allocation for over-aligned data</td> <td><a href="http://wg21.link/p0035r4">P0035R4</a></td> - <td class="none" align="center">No</td> + <td class="svn" align="center">SVN</td> </tr> <tr> <td>Template argument deduction for class templates</td> @@ -691,17 +689,17 @@ as the draft C++1z standard evolves.</p> <tr> <td>Non-type template parameters with <tt>auto</tt> type</td> <td><a href="http://wg21.link/p0127r2">P0127R2</a></td> - <td class="none" align="center">No</td> + <td class="svn" align="center">SVN</td> </tr> <tr> <td>Guaranteed copy elision</td> <td><a href="http://wg21.link/p0135r1">P0135R1</a></td> - <td class="none" align="center">No</td> + <td class="svn" align="center">SVN</td> </tr> <tr> <td rowspan=2>Stricter expression evaluation order</td> <td><a href="http://wg21.link/p0145r3">P0145R3</a></td> - <td class="none" align="center" rowspan=2>No</td> + <td class="svn" align="center" rowspan=2>SVN <a href="#p0145">(10)</a></td> </tr> <tr> <td><a href="http://wg21.link/p0400r0">P0400R0</a></td> @@ -714,21 +712,37 @@ as the draft C++1z standard evolves.</p> <tr> <td><tt>constexpr</tt> <em>if-statement</em>s</td> <td><a href="http://wg21.link/p0292r2">P0292R2</a></td> - <td class="svn" align="center">SVN</td> + <td class="full" align="center">Clang 3.9</td> </tr> <tr> <td>Inline variables</td> <td><a href="http://wg21.link/p0386r2">P0386R2</a></td> - <td class="svn" align="center">SVN</td> + <td class="full" align="center">Clang 3.9</td> </tr> <tr> <td>Structured bindings</td> <td><a href="http://wg21.link/p0217r3">P0217R3</a></td> - <td class="none" align="center">No</td> + <td class="svn" align="center">SVN</td> </tr> <tr> <td>Separate variable and condition for <tt>if</tt> and <tt>switch</tt></td> <td><a href="http://wg21.link/p0305r1">P0305R1</a></td> + <td class="full" align="center">Clang 3.9</td> + </tr> + <!-- Issaquah 2016 papers --> + <tr> + <td>Matching template template parameters to compatible arguments</td> + <td><a href="http://wg21.link/p0522r0">P0522R0</a></td> + <td class="partial" align="center">Partial <a href="#p0522">(12)</a></td> + </tr> + <tr> + <td>Removing deprecated dynamic exception specifications</td> + <td><a href="http://wg21.link/p0003r5">P0003R5</a></td> + <td class="svn" align="center">SVN</td> + </tr> + <tr> + <td>Pack expansions in <em>using-declarations</em></td> + <td><a href="http://wg21.link/p0195r2">P0195R2</a></td> <td class="svn" align="center">SVN</td> </tr> </table> @@ -741,25 +755,43 @@ In Clang 3.7, a warning is emitted for all cases that would change meaning. </span><br> <span id="p0136">(9): This is the resolution to a Defect Report, so is applied to all language versions supporting inheriting constructors. +</span><br> +<span id="p0145">(10): Under the MS ABI, function parameters are destroyed from +left to right in the callee. As a result, function parameters in calls to +<tt>operator<<</tt>, <tt>operator>></tt>, <tt>operator->*</tt>, +<tt>operator&&</tt>, <tt>operator||</tt>, and <tt>operator,</tt> +functions using expression syntax are no longer guaranteed to be destroyed in +reverse construction order in that ABI. +</span><br> +<span id="p0522">(12): Despite being the the resolution to a Defect Report, this +feature is disabled by default in all language versions, and can be enabled +explicitly with the flag <tt>-frelaxed-template-template-args</tt>. The change +to the standard lacks a corresponding change for template partial ordering, +resulting in ambiguity errors for reasonable and previously-valid code. This +issue is expected to be rectified soon. </span> </p> +</details> <h2 id="ts">Technical specifications and standing documents</h2> <p>ISO C++ also publishes a number of documents describing additional language -and library features that are not part of standard C++. The following table -describes which language features have been implemented in Clang and in which -Clang version they became available:</p> +and library features that are not part of standard C++.</p> + +<details open> +<summary>List of features and minimum Clang version with support</summary> <table width="689" border="1" cellspacing="0"> <tr> <th>Document</th> <th>Latest draft</th> + <th>Compiler flag</th> <th>Available in Clang?</th> </tr> <tr> - <td rowspan="2">SD-6: SG10 feature test recommendations</td> - <td rowspan="2"><a href="http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations">SD-6</a></td> + <td rowspan="3">SD-6: SG10 feature test recommendations</td> + <td rowspan="3"><a href="http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations">SD-6</a></td> + <td rowspan="3">N/A</td> <td class="full" align="center"> Clang 3.4 (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3745">N3745</a>)</br> </td> @@ -769,10 +801,15 @@ Clang version they became available:</p> Clang 3.6 (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4200">N4200</a>)</a> </td> </tr> + <tr> + <td class="svn" align="center"> + SVN (<a href="http://wg21.link/p0096r3">P0096R3</a>)</a> + </td> + </tr> <!-- FIXME: Implement latest recommendations. <tr> <td class="svn" align="center"> - SVN (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0096r0">P0096R0</a>)</a> + SVN (<a href="http://wg21.link/p0096r3">P0096R3</a>)</a> </td> </tr> --> @@ -786,29 +823,41 @@ Clang version they became available:</p> <tr> <td>[TS] Concepts</td> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0121r0.pdf">P0121R0</a></td> - <td class="none" align="center">No</td> + <td></td> + <td class="none" align="center">WIP</td> + </tr> + <tr> + <td>[DRAFT TS] Coroutines</td> + <td><a href="http://wg21.link/p0057r7">P0057R7</a></td> + <td></td> + <td class="none" align="center">WIP</td> </tr> <tr> <td>[TS] Library Fundamentals, Version 1 (invocation type traits)</td> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html">N4480</a></td> + <td>N/A</td> <td class="none" align="center">No</td> </tr> <tr> <td>[DRAFT TS] Library Fundamentals, Version 2 (<tt>source_location</tt>)</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4529.html">N4529</a></td> + <td><a href="http://wg21.link/n4600">N4600</a></td> + <td>N/A</td> <td class="none" align="center">No</td> </tr> <tr> - <td>[TS] Modules</td> - <td><a href="http://wg21.link/p0143r2">P0143R2</a></td> - <td class="none" align="center">No</td> + <td>[DRAFT TS] Modules</td> + <td><a href="http://wg21.link/n4592">N4592</a></td> + <td><tt>-fmodules-ts</tt></td> + <td class="none" align="center">WIP</td> </tr> <tr> <td>[TS] Transactional Memory</td> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4514.pdf">N4514</a></td> + <td></td> <td class="none" align="center">No</td> </tr> </table> +</details> </div> </body> |