From acd65d78c462b3525e6bc6276cbf4d907804c399 Mon Sep 17 00:00:00 2001 From: Craig Scott Date: Sat, 15 Jan 2022 10:51:07 +1100 Subject: Help: Actual language standard can be higher than _STANDARD Fixes: #22885 --- Help/prop_tgt/LANG_STANDARD.rst | 7 +++++++ Help/prop_tgt/LANG_STANDARD_REQUIRED.rst | 16 +++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Help/prop_tgt/LANG_STANDARD.rst b/Help/prop_tgt/LANG_STANDARD.rst index bd377ec..c83da01 100644 --- a/Help/prop_tgt/LANG_STANDARD.rst +++ b/Help/prop_tgt/LANG_STANDARD.rst @@ -15,6 +15,13 @@ newer standard is specified than is supported by the compiler, then it will fallback to the latest supported standard. This "decay" behavior may be controlled with the :prop_tgt:`_STANDARD_REQUIRED` target property. +Note that the actual language standard used may be higher than that specified +by ``_STANDARD``, regardless of the value of +:prop_tgt:`_STANDARD_REQUIRED`. In particular, +:ref:`transitive usage requirements ` or the use of +:manual:`compile features ` can raise the required +language standard above what ``_STANDARD`` specifies. + These properties are initialized by the value of the :variable:`CMAKE__STANDARD` variable if it is set when a target is created. diff --git a/Help/prop_tgt/LANG_STANDARD_REQUIRED.rst b/Help/prop_tgt/LANG_STANDARD_REQUIRED.rst index 56ecef8..e61125b 100644 --- a/Help/prop_tgt/LANG_STANDARD_REQUIRED.rst +++ b/Help/prop_tgt/LANG_STANDARD_REQUIRED.rst @@ -11,16 +11,22 @@ The variations are: * :prop_tgt:`OBJCXX_STANDARD_REQUIRED` These properties specify whether the value of :prop_tgt:`_STANDARD` is a -requirement. When ``OFF`` or unset, the :prop_tgt:`_STANDARD` target +requirement. When false or unset, the :prop_tgt:`_STANDARD` target property is treated as optional and may "decay" to a previous standard if the -requested is not available. +requested standard is not available. When ``_STANDARD_REQUIRED`` is set +to true, :prop_tgt:`_STANDARD` becomes a hard requirement and a fatal +error will be issued if that requirement cannot be met. + +Note that the actual language standard used may be higher than that specified +by :prop_tgt:`_STANDARD`, regardless of the value of +``_STANDARD_REQUIRED``. In particular, +:ref:`transitive usage requirements ` or the use of +:manual:`compile features ` can raise the required +language standard above what :prop_tgt:`_STANDARD` specifies. These properties are initialized by the value of the :variable:`CMAKE__STANDARD_REQUIRED` variable if it is set when a target is created. -For supported CMake versions see the respective pages. -To control language standard versions see :prop_tgt:`_STANDARD`. - See the :manual:`cmake-compile-features(7)` manual for information on compile features and a list of supported compilers. -- cgit v0.12