Previously, `cm::static_reference_cast` used `invoke_result_t` and took
the address of `O::get`. This is not in complete conformance with
standard.
Change the implementation to use `std::declval<O>.get()` which is always
well-defined.
For now, compiler extensions are no longer activated on CMake sources.
However these extensions are still used for various third parties.
This MR is a partial answer to the issue #20454.
Provide a standardized way to handle the C++ "standard" headers
customized to be used with current CMake C++ standard constraints.
Offer under directory `cm` headers which can be used as direct
replacements of the standard ones. For example:
#include <cm/string_view>
can be used safely for CMake development in place of the `<string_view>`
standard header.
Fixes: #19491