Help: Separate C++ compile feature by standard

Additionally, mention that no fine-grained features are available for
C++ 17 and beyond.

Co-Authored-By: Craig Scott <craig.scott@crascit.com>
This commit is contained in:
Francisco Pombal
2020-08-20 19:38:49 +01:00
committed by Craig Scott
parent 692d259f9e
commit 268fcc2782

View File

@@ -13,8 +13,14 @@ The features listed here may be used with the :command:`target_compile_features`
command. See the :manual:`cmake-compile-features(7)` manual for information on
compile features and a list of supported compilers.
The features known to this version of CMake are listed below.
The features known to this version of CMake are:
High level meta features indicating C++ standard support
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The following meta features indicate general support for the associated
language standard. It reflects the language support claimed by the compiler,
but it does not necessarily imply complete conformance to that standard.
``cxx_std_98``
Compiler mode is at least C++ 98.
@@ -31,10 +37,29 @@ The features known to this version of CMake are:
``cxx_std_20``
Compiler mode is at least C++ 20.
``cxx_aggregate_default_initializers``
Aggregate default initializers, as defined in N3605_.
.. _N3605: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3605.html
Low level individual compile features
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
For C++ 11 and C++ 14, compilers were sometimes slow to implement certain
language features. CMake provided some individual compile features to help
projects determine whether specific features were available. These individual
features are now less relevant and projects should generally prefer to use the
high level meta features instead. Individual compile features are not provided
for C++ 17 or later.
See the :manual:`cmake-compile-features(7)` manual for further discussion of
the use of individual compile features.
Individual features from C++ 98
"""""""""""""""""""""""""""""""
``cxx_template_template_parameters``
Template template parameters, as defined in ``ISO/IEC 14882:1998``.
Individual features from C++ 11
"""""""""""""""""""""""""""""""
``cxx_alias_templates``
Template aliases, as defined in N2258_.
@@ -56,30 +81,16 @@ The features known to this version of CMake are:
.. _N2761: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
``cxx_attribute_deprecated``
``[[deprecated]]`` attribute, as defined in N3760_.
.. _N3760: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3760.html
``cxx_auto_type``
Automatic type deduction, as defined in N1984_.
.. _N1984: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf
``cxx_binary_literals``
Binary literals, as defined in N3472_.
.. _N3472: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf
``cxx_constexpr``
Constant expressions, as defined in N2235_.
.. _N2235: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
``cxx_contextual_conversions``
Contextual conversions, as defined in N3323_.
.. _N3323: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3323.pdf
``cxx_decltype_incomplete_return_types``
Decltype on incomplete return types, as defined in N3276_.
@@ -91,11 +102,6 @@ The features known to this version of CMake are:
.. _N2343: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
``cxx_decltype_auto``
``decltype(auto)`` semantics, as defined in N3638_.
.. _N3638: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
``cxx_default_function_template_args``
Default template arguments for function templates, as defined in DR226_
@@ -121,11 +127,6 @@ The features known to this version of CMake are:
.. _N2346: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
``cxx_digit_separators``
Digit separators, as defined in N3781_.
.. _N3781: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
``cxx_enum_forward_declarations``
Enum forward declarations, as defined in N2764_.
@@ -163,11 +164,6 @@ The features known to this version of CMake are:
.. _N2672: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
``cxx_generic_lambdas``
Generic lambdas, as defined in N3649_.
.. _N3649: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3649.html
``cxx_inheriting_constructors``
Inheriting constructors, as defined in N2540_.
@@ -183,11 +179,6 @@ The features known to this version of CMake are:
.. _N2927: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2927.pdf
``cxx_lambda_init_captures``
Initialized lambda captures, as defined in N3648_.
.. _N3648: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3648.html
``cxx_local_type_template_args``
Local and unnamed types as template arguments, as defined in N2657_.
@@ -236,16 +227,6 @@ The features known to this version of CMake are:
.. _N2439: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
``cxx_relaxed_constexpr``
Relaxed constexpr, as defined in N3652_.
.. _N3652: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html
``cxx_return_type_deduction``
Return type deduction on normal functions, as defined in N3386_.
.. _N3386: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3386.html
``cxx_right_angle_brackets``
Right angle bracket parsing, as defined in N1757_.
@@ -301,11 +282,6 @@ The features known to this version of CMake are:
.. _N2765: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf
``cxx_variable_templates``
Variable templates, as defined in N3651_.
.. _N3651: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3651.pdf
``cxx_variadic_macros``
Variadic macros, as defined in N1653_.
@@ -316,5 +292,61 @@ The features known to this version of CMake are:
.. _N2242: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf
``cxx_template_template_parameters``
Template template parameters, as defined in ``ISO/IEC 14882:1998``.
Individual features from C++ 14
"""""""""""""""""""""""""""""""
``cxx_aggregate_default_initializers``
Aggregate default initializers, as defined in N3605_.
.. _N3605: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3605.html
``cxx_attribute_deprecated``
``[[deprecated]]`` attribute, as defined in N3760_.
.. _N3760: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3760.html
``cxx_binary_literals``
Binary literals, as defined in N3472_.
.. _N3472: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf
``cxx_contextual_conversions``
Contextual conversions, as defined in N3323_.
.. _N3323: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3323.pdf
``cxx_decltype_auto``
``decltype(auto)`` semantics, as defined in N3638_.
.. _N3638: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
``cxx_digit_separators``
Digit separators, as defined in N3781_.
.. _N3781: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
``cxx_generic_lambdas``
Generic lambdas, as defined in N3649_.
.. _N3649: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3649.html
``cxx_lambda_init_captures``
Initialized lambda captures, as defined in N3648_.
.. _N3648: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3648.html
``cxx_relaxed_constexpr``
Relaxed constexpr, as defined in N3652_.
.. _N3652: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html
``cxx_return_type_deduction``
Return type deduction on normal functions, as defined in N3386_.
.. _N3386: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3386.html
``cxx_variable_templates``
Variable templates, as defined in N3651_.
.. _N3651: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3651.pdf