Merge pull request #742 from CapeLeidokos/pr_disable_RESTRICT_ARGS_COUNT

Disable RESTRICT_ARGS_COUNT for clang builds
pull/748/head
Gergely Nagy 5 years ago committed by GitHub
commit ff1b9beebb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -99,6 +99,27 @@
int array[] = { A, B, RESTRICT_ARGS_COUNT(C, 3, B_MACRO, ##__VA_ARGS__) }; int array[] = { A, B, RESTRICT_ARGS_COUNT(C, 3, B_MACRO, ##__VA_ARGS__) };
#endif #endif
// //
#ifdef __clang__
// Clang does not allow temporaries of anonymous structs as they are used
// in the below definition of RESTRICT_ARGS_COUNT as accepted by gcc
// (due to a language extension,
// see https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html)
//
// As there is currently no other known workaround available that would allow
// us to sneak a static_assert (unfortunately a statement rather
// than an expression) into the initializer list of a constexpr array,
// like the keymap.
//
// Thus, we have to disable this feature for clang builds until
// a solution becomes available.
//
#define RESTRICT_ARGS_COUNT(B, \
NUM_EXPECTED_ARGS, \
ORIGINAL_MACRO, \
...) \
B
#else
#define RESTRICT_ARGS_COUNT(B, \ #define RESTRICT_ARGS_COUNT(B, \
NUM_EXPECTED_ARGS, \ NUM_EXPECTED_ARGS, \
ORIGINAL_MACRO, \ ORIGINAL_MACRO, \
@ -141,6 +162,7 @@ int array[] = { A, B, RESTRICT_ARGS_COUNT(C, 3, B_MACRO, ##__VA_ARGS__) };
}){}, /* End of dummy lambda, the comma operator's A operand. */ __NL__ \ }){}, /* End of dummy lambda, the comma operator's A operand. */ __NL__ \
B /* The overall ASSERT_ARGS_COUNT evaluates to B. */ __NL__ \ B /* The overall ASSERT_ARGS_COUNT evaluates to B. */ __NL__ \
) )
#endif
/* Count the args in a list */ /* Count the args in a list */
#define NUM_ARGS(...) (sizeof((int[])__VA_ARGS__)/sizeof(int)) #define NUM_ARGS(...) (sizeof((int[])__VA_ARGS__)/sizeof(int))

Loading…
Cancel
Save