forked from OSchip/llvm-project
[cxx_status] Update to match Jacksonville 2018 motions.
Also rearrange how we list DR motions: rather than listing them as part of some later standard, list them against the feature they are a DR against. Explicitly add a description of how we handle DRs. llvm-svn: 327769
This commit is contained in:
parent
220671a080
commit
a14f320e38
|
@ -56,7 +56,7 @@ 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/catalogue_detail.htm?csnumber=50372">ISO
|
||||
href="http://www.iso.org/standard/50372.html">ISO
|
||||
C++ 2011 standard</a>.
|
||||
|
||||
<p>By default, Clang builds C++ code according to the C++98 standard, with many
|
||||
|
@ -134,10 +134,15 @@ with <a href="http://libcxx.llvm.org/">libc++</a> or with gcc's libstdc++.
|
|||
<td class="full" align="center">Clang 2.9</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lambda expressions</td>
|
||||
<td rowspan="2">Lambda expressions</td>
|
||||
<td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf">N2927</a></td>
|
||||
<td class="full" align="center">Clang 3.1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- from Albuquerque 2017 -->
|
||||
<td><a href="http://wg21.link/p0588r1">P0588R1</a> (<a href="#dr">DR</a>)</td>
|
||||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Declared type of an expression</td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf">N2343</a></td>
|
||||
|
@ -195,10 +200,15 @@ with <a href="http://libcxx.llvm.org/">libc++</a> or with gcc's libstdc++.
|
|||
<td class="full" align="center">Clang 3.3 <a href="#n2761">(1)</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Generalized constant expressions</td>
|
||||
<td rowspan="2">Generalized constant expressions</td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf">N2235</a></td>
|
||||
<td class="full" align="center">Clang 3.1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- from Albuquerque 2017 -->
|
||||
<td><a href="http://wg21.link/p0859r0">P0859R0</a> (<a href="#dr">DR</a>)</td>
|
||||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Alignment support</td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf">N2341</a></td>
|
||||
|
@ -220,10 +230,15 @@ with <a href="http://libcxx.llvm.org/">libc++</a> or with gcc's libstdc++.
|
|||
<td class="full" align="center">Clang 3.0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Inheriting constructors</td>
|
||||
<td rowspan="2">Inheriting constructors</td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm">N2540</a></td>
|
||||
<td class="full" align="center">Clang 3.3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- from Kona 2015 -->
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0136r1.html">P0136R1</a> (<a href="#dr">DR</a>)</td>
|
||||
<td class="full" align="center">Clang 3.9</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Explicit conversion operators</td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf">N2437</a></td>
|
||||
|
@ -296,10 +311,15 @@ with <a href="http://libcxx.llvm.org/">libc++</a> or with gcc's libstdc++.
|
|||
<td class="full" align="center">Clang 2.9</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Range-based for</td>
|
||||
<td rowspan="2">Range-based for</td>
|
||||
<td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html">N2930</a></td>
|
||||
<td class="full" align="center">Clang 3.0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- from Jacksonville 2018 -->
|
||||
<td><a href="http://wg21.link/p0962r1">P0962R1</a> (<a href="#dr">DR</a>)</td>
|
||||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Explicit virtual overrides</td>
|
||||
<td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm">N2928</a>
|
||||
|
@ -427,7 +447,7 @@ change.</span>
|
|||
<h2 id="cxx14">C++14 implementation status</h2>
|
||||
|
||||
<p>Clang 3.4 and later implement all of the <a
|
||||
href="http://www.iso.org/iso/catalogue_detail.htm?csnumber=64029">ISO
|
||||
href="http://www.iso.org/standard/64029.html">ISO
|
||||
C++ 2014 standard</a>.
|
||||
|
||||
<p>You can use Clang in C++14 mode with the <code>-std=c++14</code> option
|
||||
|
@ -521,8 +541,8 @@ version 3.7.
|
|||
|
||||
<h2 id="cxx17">C++17 implementation status</h2>
|
||||
|
||||
<p>Clang 5 and later implement all the features
|
||||
of the C++ 2017 Draft International Standard.
|
||||
<p>Clang 5 and later implement all the features of the
|
||||
<a href="https://www.iso.org/standard/68564.html">ISO C++ 2017 standard</a>.
|
||||
|
||||
<p>You can use Clang in C++17 mode with the <code>-std=c++17</code> option
|
||||
(use <code>-std=c++1z</code> in Clang 4 and earlier).</p>
|
||||
|
@ -619,11 +639,6 @@ of the C++ 2017 Draft International Standard.
|
|||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0061.html">P0061R1</a></td>
|
||||
<td class="full" align="center">Yes</td>
|
||||
</tr>
|
||||
<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="full" align="center">Clang 3.9 <a href="#p0136">(9)</a></td>
|
||||
</tr>
|
||||
<!-- Jacksonville papers -->
|
||||
<tr>
|
||||
<td><tt>[[fallthrough]]</tt> attribute</td>
|
||||
|
@ -682,13 +697,18 @@ of the C++ 2017 Draft International Standard.
|
|||
<td class="full" align="center">Clang 4</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">Template argument deduction for class templates</td>
|
||||
<td rowspan="3">Template argument deduction for class templates</td>
|
||||
<td><a href="http://wg21.link/p0091r3">P0091R3</a></td>
|
||||
<td rowspan="2" class="full" align="center">Clang 5</td>
|
||||
</tr>
|
||||
<tr> <!-- from Issaquah -->
|
||||
<td><a href="http://wg21.link/p0512r0">P0512R0</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- from Toronto 2017 -->
|
||||
<td><a href="http://wg21.link/p0702r1">P0702R1</a> (<a href="#dr">DR</a>)</td>
|
||||
<td class="svn" align="center">Clang 6</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Non-type template parameters with <tt>auto</tt> type</td>
|
||||
<td><a href="http://wg21.link/p0127r2">P0127R2</a></td>
|
||||
|
@ -702,7 +722,7 @@ of the C++ 2017 Draft International Standard.
|
|||
<tr>
|
||||
<td rowspan=2>Stricter expression evaluation order</td>
|
||||
<td><a href="http://wg21.link/p0145r3">P0145R3</a></td>
|
||||
<td class="full" align="center" rowspan=2>Clang 4 <a href="#p0145">(10)</a></td>
|
||||
<td class="full" align="center" rowspan=2>Clang 4 <a href="#p0145">(9)</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="http://wg21.link/p0400r0">P0400R0</a></td>
|
||||
|
@ -723,10 +743,20 @@ of the C++ 2017 Draft International Standard.
|
|||
<td class="full" align="center">Clang 3.9</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Structured bindings</td>
|
||||
<td rowspan="3">Structured bindings</td>
|
||||
<td><a href="http://wg21.link/p0217r3">P0217R3</a></td>
|
||||
<td class="full" align="center">Clang 4</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- from Jacksonville 2018 -->
|
||||
<td><a href="http://wg21.link/p0961r1">P0961R1</a> (<a href="#dr">DR</a>)</td>
|
||||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- from Jacksonville 2018 -->
|
||||
<td><a href="http://wg21.link/p0969r0">P0969R0</a> (<a href="#dr">DR</a>)</td>
|
||||
<td class="none" align="center">No</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>
|
||||
|
@ -736,7 +766,7 @@ of the C++ 2017 Draft International Standard.
|
|||
<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>
|
||||
<td class="partial" align="center">Partial <a href="#p0522">(10)</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Removing deprecated dynamic exception specifications</td>
|
||||
|
@ -756,17 +786,14 @@ all language versions that allow type deduction from <tt>auto</tt>
|
|||
(per the request of the C++ committee).
|
||||
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
|
||||
<span id="p0145">(9): 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 resolution to a Defect Report, this
|
||||
<span id="p0522">(10): Despite being 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> in Clang 4
|
||||
onwards.
|
||||
|
@ -826,11 +853,6 @@ as the draft C++2a standard evolves.
|
|||
<td><a href="http://wg21.link/p0428r2">P0428R2</a></td>
|
||||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Initializer list constructors in class template argument deduction</td>
|
||||
<td><a href="http://wg21.link/p0702r1">P0702R1</a></td>
|
||||
<td class="svn" align="center">Clang 6 <a href="#p0702">(13)</a></td>
|
||||
</tr>
|
||||
<tr id="p0734">
|
||||
<td rowspan="2">Concepts</td>
|
||||
<td><a href="http://wg21.link/p0734r0">P0734R0</a></td>
|
||||
|
@ -845,11 +867,6 @@ as the draft C++2a standard evolves.
|
|||
<td><a href="http://wg21.link/p0614r1">P0614R1</a></td>
|
||||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Simplifying implicit lambda capture</td>
|
||||
<td><a href="http://wg21.link/p0588r1">P0588R1</a></td>
|
||||
<td class="none" align="center">No <a href="#p0588">(14)</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ADL and function templates that are not visible</td>
|
||||
<td><a href="http://wg21.link/p0846r0">P0846R0</a></td>
|
||||
|
@ -861,15 +878,13 @@ as the draft C++2a standard evolves.
|
|||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Less eager instantiation of <tt>constexpr</tt> functions</td>
|
||||
<td><a href="http://wg21.link/p0859r0">P0859R0</a></td>
|
||||
<td class="none" align="center">No <a href="#p0859">(15)</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Consistent comparison (<tt>operator<=></tt>)</td>
|
||||
<td rowspan="2">Consistent comparison (<tt>operator<=></tt>)</td>
|
||||
<td><a href="http://wg21.link/p0515r3">P0515R3</a></td>
|
||||
<td class="none" align="center">No</td>
|
||||
<td rowspan="2" class="none" align="center">No</td>
|
||||
</tr>
|
||||
<tr> <!-- from Jacksonville -->
|
||||
<td><a href="http://wg21.link/p0905r1">P0905R1</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Access checking on specializations</td>
|
||||
<td><a href="http://wg21.link/p0692r1">P0692R1</a></td>
|
||||
|
@ -885,20 +900,43 @@ as the draft C++2a standard evolves.
|
|||
<td><a href="http://wg21.link/p0315r4">P0315R4</a></td>
|
||||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
<!-- Jacksonville papers -->
|
||||
<tr>
|
||||
<td><tt>[[no_unique_address]]</tt> attribute</td>
|
||||
<td><a href="http://wg21.link/p0840r2">P0840R2</a></td>
|
||||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><tt>[[likely]]</tt> and <tt>[[unlikely]]</tt> attributes</td>
|
||||
<td><a href="http://wg21.link/p0479r5">P0479R5</a></td>
|
||||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><tt>typename</tt> optional in more contexts</td>
|
||||
<td><a href="http://wg21.link/p0634r3">P0634R3</a></td>
|
||||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Pack expansion in lambda <i>init-capture</i></td>
|
||||
<td><a href="http://wg21.link/p0780r2">P0780R2</a></td>
|
||||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
</table>
|
||||
</details>
|
||||
|
||||
<p>
|
||||
<span id="p0702">(13): This is the resolution to a Defect Report, so is applied
|
||||
to all language versions supporting class template argument deduction.
|
||||
</span><br>
|
||||
<span id="p0588">(14): This is the resolution to a Defect Report, so will be applied
|
||||
to all language versions supporting lamba expressions.
|
||||
</span><br>
|
||||
<span id="p0859">(15): This is the resolution to a Defect Report, so will be applied
|
||||
to all language versions supporting <tt>constexpr</tt>.
|
||||
</span>
|
||||
</p>
|
||||
<h2 id="dr">Defect reports</h2>
|
||||
|
||||
<p>Clang generally aims to implement resolutions to Defect Reports (bug fixes
|
||||
against prior standards) retroactively, in all prior standard versions where
|
||||
the fix is meaningful. Significant Defect Report changes to language features
|
||||
after the publication of the relevant standard are marked (DR) in the above
|
||||
table.</p>
|
||||
|
||||
<p>Clang also has a test suite for conformance to resolutions for issues on the
|
||||
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_toc.html">C++ core issues list</a>,
|
||||
most of which are considered Defect Reports.
|
||||
<a href="cxx_dr_status.html">Implementation status for C++ core issues</a> based on
|
||||
that test suite is tracked on a separate page.</p>
|
||||
|
||||
<h2 id="ts">Technical specifications and standing documents</h2>
|
||||
|
||||
|
@ -959,6 +997,7 @@ and library features that are not part of standard C++.</p>
|
|||
<td class="na" align="center">Superseded by <a href="#p0734">P0734R0</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- track unimplemented Coroutines features: p0913r1 p0914r1 -->
|
||||
<td>[DRAFT TS] Coroutines</td>
|
||||
<td><a href="https://isocpp.org/files/papers/N4663.pdf">N4663</a></td>
|
||||
<td><tt>-fcoroutines-ts<br>-stdlib=libc++</tt></td>
|
||||
|
@ -982,6 +1021,14 @@ and library features that are not part of standard C++.</p>
|
|||
<td><tt>-fmodules-ts</tt></td>
|
||||
<td class="none" align="center">WIP</td>
|
||||
</tr>
|
||||
<!--
|
||||
<tr>
|
||||
<td>[DRAFT TS] Reflection</td>
|
||||
<td><a href="http://wg21.link/p0194r6">P0194R6</a></td>
|
||||
<td></td>
|
||||
<td class="none" align="center">No</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>
|
||||
|
|
Loading…
Reference in New Issue