diff options
| author | stijn <stijn@ignitron.net> | 2023-11-13 16:04:40 +0100 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2023-11-17 14:31:42 +1100 |
| commit | a968888f69d94890e8851efe38ace3b9448552d7 (patch) | |
| tree | 7ac93b59f763373e589bd27be4e235b46d29e4ef /py/misc.h | |
| parent | 92741a34388e85d07e26511ff81b27af99445f00 (diff) | |
py/obj: Fix mp_obj_is_type compilation with C++.
Fixes issue #12951.
Signed-off-by: stijn <stijn@ignitron.net>
Diffstat (limited to 'py/misc.h')
| -rw-r--r-- | py/misc.h | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -52,10 +52,15 @@ typedef unsigned int uint; // Static assertion macro #define MP_STATIC_ASSERT(cond) ((void)sizeof(char[1 - 2 * !(cond)])) -#if defined(_MSC_VER) -#define MP_STATIC_ASSERT_NOT_MSC(cond) (1) +// In C++ things like comparing extern const pointers are not constant-expressions so cannot be used +// in MP_STATIC_ASSERT. Note that not all possible compiler versions will reject this. Some gcc versions +// do, others only with -Werror=vla, msvc always does. +// The (void) is needed to avoid "left operand of comma operator has no effect [-Werror=unused-value]" +// when using this macro on the left-hand side of a comma. +#if defined(_MSC_VER) || defined(__cplusplus) +#define MP_STATIC_ASSERT_NONCONSTEXPR(cond) ((void)1) #else -#define MP_STATIC_ASSERT_NOT_MSC(cond) MP_STATIC_ASSERT(cond) +#define MP_STATIC_ASSERT_NONCONSTEXPR(cond) MP_STATIC_ASSERT(cond) #endif // Round-up integer division |
