mirror of
https://github.com/reactos/CMake.git
synced 2025-01-26 05:47:10 +00:00
Merge topic 'fix-static-assert'
e2f25d3e WriteCompilerDetectionHeader: fix STATIC_ASSERT Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !555
This commit is contained in:
commit
45ca6e739a
@ -503,10 +503,19 @@ function(write_compiler_detection_header
|
||||
if (feature STREQUAL cxx_static_assert)
|
||||
set(def_value "${prefix_arg}_STATIC_ASSERT(X)")
|
||||
set(def_value_msg "${prefix_arg}_STATIC_ASSERT_MSG(X, MSG)")
|
||||
set(static_assert_struct "template<bool> struct ${prefix_arg}StaticAssert;\ntemplate<> struct ${prefix_arg}StaticAssert<true>{};\n")
|
||||
set(def_standard "# define ${def_value} static_assert(X, #X)\n# define ${def_value_msg} static_assert(X, MSG)")
|
||||
set(def_alternative "${static_assert_struct}# define ${def_value} sizeof(${prefix_arg}StaticAssert<X>)\n# define ${def_value_msg} sizeof(${prefix_arg}StaticAssert<X>)")
|
||||
string(APPEND file_content "# if defined(${def_name}) && ${def_name}\n${def_standard}\n# else\n${def_alternative}\n# endif\n\n")
|
||||
set(def_fallback "enum { ${prefix_arg}_STATIC_ASSERT_JOIN(${prefix_arg}StaticAssertEnum, __LINE__) = sizeof(${prefix_arg}StaticAssert<X>) }")
|
||||
string(APPEND file_content "# if defined(${def_name}) && ${def_name}
|
||||
# define ${def_value} static_assert(X, #X)
|
||||
# define ${def_value_msg} static_assert(X, MSG)
|
||||
# else
|
||||
# define ${prefix_arg}_STATIC_ASSERT_JOIN(X, Y) ${prefix_arg}_STATIC_ASSERT_JOIN_IMPL(X, Y)
|
||||
# define ${prefix_arg}_STATIC_ASSERT_JOIN_IMPL(X, Y) X##Y
|
||||
template<bool> struct ${prefix_arg}StaticAssert;
|
||||
template<> struct ${prefix_arg}StaticAssert<true>{};
|
||||
# define ${def_value} ${def_fallback}
|
||||
# define ${def_value_msg} ${def_fallback}
|
||||
# endif
|
||||
\n")
|
||||
endif()
|
||||
if (feature STREQUAL cxx_alignas)
|
||||
set(def_value "${prefix_arg}_ALIGNAS(X)")
|
||||
|
@ -8,6 +8,9 @@
|
||||
#error Expect no C features defined
|
||||
#endif
|
||||
|
||||
TEST_STATIC_ASSERT(true);
|
||||
TEST_STATIC_ASSERT_MSG(true, "msg");
|
||||
|
||||
int main()
|
||||
{
|
||||
return 0;
|
||||
|
@ -8,6 +8,9 @@
|
||||
#error Expect no C features defined
|
||||
#endif
|
||||
|
||||
MULTI_STATIC_ASSERT(true);
|
||||
MULTI_STATIC_ASSERT_MSG(true, "msg");
|
||||
|
||||
int main()
|
||||
{
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user