[cmake-developers] [PATCH] Macro generation for relaxed constexpr
Stephen Kelly
steveire at gmail.com
Wed Jul 8 15:46:35 EDT 2015
Jean-Michaël Celerier wrote:
> Hello,
>
> At the ned of this mail is a patch that adds generation of a macro for
> the relaxed ("c++14") constexpr in WriteCompilerDetectionHeader.
Thanks for working on this.
I have some thoughts for archival purposes on the mailing list. These aren't
things you necessarily need to address:
* I think I've read about constexpr being made even more relaxed in a
future CXX standard. Would we then call it 'yet_more_relaxed_constexpr'?
Clang, whose names CMake follows, likely won't introduce a name for it
because it will likely start to rely on SD-6 macros instead of extending
__has_feature. SD-6 doesn't have that problem because it would just use a
new value for the __cpp_constexpr macro (which already has two possible
values 200704 and 201304).
* The 'relaxed' name is already what is currently used for this feature.
Future developments don't really matter.
* It's appropriate for this macro to expand to empty if
cxx_relaxed_constexpr is not available, because a function marked constexpr
which is only cxx11-constexpr but not cxx14-constexpr will fail to compile
anyway. Programmers are aware of ways to implement methods in a way that is
cxx11-constexpr, even if making it cxx14-constexpr would be more
easy/readable.
* A method marked constexpr will fail to compile with a compiler which does
not support relaxed constexpr if the method uses language which requires
relaxed mode (such as a for loop), even if the method is evaluated in a non-
constant expression. I tested GCC and Clang.
So assuming all that is correct, I think this patch is good.
I think there should be a test for the different allowed contexts of the
${prefix_arg}_RELAXED_CONSTEXPR and ${prefix_arg}_CONSTEXPR macros. Could
you extend Tests/Module/WriteCompilerDetectionHeader with a test for that?
Thanks,
Steve.
More information about the cmake-developers
mailing list