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.
--
Powered by www.kitware.com
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Kitware offers various services to support the CMake community. For more
information on each offering, please visit:
CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake-developers