The variations are:

These properties specify whether the value of <LANG>_STANDARD is a requirement. When false or unset, the <LANG>_STANDARD target property is treated as optional and may "decay" to a previous standard if the requested standard is not available. When <LANG>_STANDARD_REQUIRED is set to true, <LANG>_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 <LANG>_STANDARD, regardless of the value of <LANG>_STANDARD_REQUIRED. In particular, usage requirements or the use of compile features can raise the required language standard above what <LANG>_STANDARD specifies.

These properties are initialized by the value of the CMAKE_<LANG>_STANDARD_REQUIRED variable if it is set when a target is created.

See the cmake-compile-features(7) manual for information on compile features and a list of supported compilers.