[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