On Mon, Jan 21, 2019 at 04:11:04PM +0000, Jonathan Wakely wrote: > > I'd like to ping this patch. > > For P0941R2 I think we can just say it's supported. For the library > docs I said we support it since GCC 5.1 because that's when we started > defining feature test macros. The point of the paper is to define > macros for the features that are supported, and we've been doing that > for years. If a macro is missing, it's because we don't support the > feature yet, and that's a correct implementation of the macro!
So what about saying it is supported since e.g. 5 when __has_cpp_attribute support has been added (or 4.9 when first __cpp_* predefined macros were added)? Like below. What about the rest, ok for wwwdocs? --- htdocs/projects/cxx-status.html.jj 2019-01-14 12:18:18.792043123 +0100 +++ htdocs/projects/cxx-status.html 2019-01-21 17:34:41.345489056 +0100 @@ -115,7 +115,7 @@ <tr> <td> Range-based for statements with initializer </td> <td><a href="http://wg21.link/p0614r1">P0614R1</a> </td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> @@ -127,28 +127,28 @@ <tr> <td> ADL and function templates that are not visible </td> <td><a href="http://wg21.link/p0846r0">P0846R0</a> </td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> <td> <code>const</code> mismatch with defaulted copy constructor </td> <td><a href="http://wg21.link/p0641r2">P0641R2</a> </td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> <td> Less eager instantiation of <code>constexpr</code> functions </td> <td><a href="http://wg21.link/p0859r0">P0859R0</a></td> - <td class="supported"> 5.2 (mostly)<br/>9 (P0859R0) </td> + <td class="supported"> 5.2 (mostly)<br/> <a href="../gcc-9/changes.html#cxx">9</a> (P0859R0) </td> <td> </td> </tr> <tr> <td> Consistent comparison (<code>operator<=></code>) </td> <td><a href="http://wg21.link/p0515r3">P0515R3</a><br/> - <a href="http://wg21.link/P0905r1">P0905R1</a><br/> + <a href="http://wg21.link/p0905r1">P0905R1</a><br/> <a href="http://wg21.link/p1120r0">P1120R0</a></td> <td class="unsupported"> No </td> - <td> </td> + <td> __cpp_impl_three_way_comparison >= 201711 </td> </tr> <tr> <td> Access checking on specializations </td> @@ -159,19 +159,19 @@ <tr> <td> Default constructible and assignable stateless lambdas </td> <td><a href="http://wg21.link/p0624r2">P0624R2</a></td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> <td> Lambdas in unevaluated contexts </td> <td><a href="http://wg21.link/p0315r4">P0315R4</a></td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> <td> Language support for empty objects </td> <td><a href="http://wg21.link/p0840r2">P0840R2</a></td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> @@ -195,32 +195,32 @@ <tr> <td> Down with typename! </td> <td><a href="http://wg21.link/p0634r3">P0634R3</a></td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> <td> Allow pack expansion in lambda init-capture </td> <td><a href="http://wg21.link/p0780r2">P0780R2</a></td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> <td> Proposed wording for likely and unlikely attributes </td> <td><a href="http://wg21.link/p0479r5">P0479R5</a></td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> <td> Deprecate implicit capture of this via [=] </td> <td><a href="http://wg21.link/p0806r2">P0806R2</a></td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> <td> Class Types in Non-Type Template Parameters </td> <td><a href="http://wg21.link/p0732r2">P0732R2</a></td> - <td class="supported"> 9 </td> - <td> </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> + <td> __cpp_nontype_template_parameter_class >= 201806 </td> </tr> <tr> <td> Atomic Compare-and-Exchange with Padding Bits </td> @@ -231,19 +231,19 @@ <tr> <td> Efficient sized delete for variable sized classes </td> <td><a href="http://wg21.link/p0722r3">P0722R3</a></td> - <td class="supported"> 9 </td> - <td> </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> + <td> __cpp_impl_destroying_delete >= 201806 </td> </tr> <tr> <td> Allowing Virtual Function Calls in Constant Expressions </td> <td><a href="http://wg21.link/p1064r0">P1064R0</a></td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> <td> Prohibit aggregates with user-declared constructors </td> <td><a href="http://wg21.link/p1008r1">P1008R1</a></td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> @@ -256,20 +256,20 @@ <tr> <td> explicit(bool) </td> <td><a href="http://wg21.link/p0892r2">P0892R2</a></td> - <td class="supported"> 9 </td> - <td> </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> + <td> __cpp_conditional_explicit >= 201806 </td> </tr> <tr> <td> Signed integers are two's complement </td> <td><a href="http://wg21.link/p1236r1">P1236R1</a></td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> <td> char8_t </td> <td><a href="http://wg21.link/p0482r6">P0482R6</a></td> <td class="unsupported"> No </td> - <td> </td> + <td> __cpp_char8_t >= 201811 </td> </tr> <tr> <td> Immediate functions (consteval) </td> @@ -280,23 +280,30 @@ <tr> <td> std::is_constant_evaluated </td> <td><a href="http://wg21.link/p0595r2">P0595R2</a></td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> <td> Nested inline namespaces </td> <td><a href="http://wg21.link/p1094r2">P1094R2</a></td> - <td class="supported"> 9 </td> + <td class="supported"> <a href="../gcc-9/changes.html#cxx">9</a> </td> <td> </td> </tr> <tr> - <td> Relaxations of constexpr restrictions</td> + <td> Relaxations of constexpr restrictions </td> <td><a href="http://wg21.link/p1002r1">P1002R1</a><br/> <a href="http://wg21.link/p1327r1">P1327R1</a><br/> <a href="http://wg21.link/p1330r0">P1330R0</a></td> <td class="unsupported"> No </td> <td> </td> </tr> + <tr> + <td> Feature test macros </td> + <td><a href="http://wg21.link/p0941r2">P0941R2</a><br/> + <td class="supported"> <a href="../gcc-4.9/changes.html#cxx">4.9</a> (<code>__cpp_</code> macros) <br /> + <a href="../gcc-5/changes.html#cxx">5</a> (<code>__has_cpp_attribute</code>) </td> + <td> </td> + </tr> </table> <h2 id="cxx17">C++17 Support in GCC</h2> Jakub