aboutsummaryrefslogtreecommitdiff
path: root/www/cxx_status.html
diff options
context:
space:
mode:
Diffstat (limited to 'www/cxx_status.html')
-rw-r--r--www/cxx_status.html169
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&lt;&lt;</tt>, <tt>operator&gt;&gt;</tt>, <tt>operator-&gt;*</tt>,
+<tt>operator&amp;&amp;</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>