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