diff --git a/platform/mbed_assert.h b/platform/mbed_assert.h index a748f3aceb..7b2be2cfaa 100644 --- a/platform/mbed_assert.h +++ b/platform/mbed_assert.h @@ -124,8 +124,14 @@ do { \ * }; * @endcode */ -#define MBED_STRUCT_STATIC_ASSERT(expr, msg) int : (expr) ? 0 : -1 - +#if defined(__cplusplus) && (__cplusplus >= 201103L || __cpp_static_assert >= 200410L) +#define MBED_STRUCT_STATIC_ASSERT(expr, msg) static_assert(expr, msg) +#elif !defined(__cplusplus) && __STDC_VERSION__ >= 201112L +#define MBED_STRUCT_STATIC_ASSERT(expr, msg) _Static_assert(expr, msg) +#else +#include +#define MBED_STRUCT_STATIC_ASSERT(expr, msg) bool : (expr) ? 0 : -1 +#endif #endif diff --git a/platform/mbed_toolchain.h b/platform/mbed_toolchain.h index a9cccabb9f..12c18b3241 100644 --- a/platform/mbed_toolchain.h +++ b/platform/mbed_toolchain.h @@ -72,7 +72,11 @@ * @endcode */ #ifndef MBED_ALIGN -#if defined(__ICCARM__) +#if __cplusplus >= 201103 && !defined __CC_ARM +#define MBED_ALIGN(N) alignas(N) +#elif __STDC_VERSION__ >= 201112 && !defined __CC_ARM +#define MBED_ALIGN(N) _Alignas(N) +#elif defined(__ICCARM__) #define MBED_ALIGN(N) _Pragma(MBED_STRINGIFY(data_alignment=N)) #else #define MBED_ALIGN(N) __attribute__((aligned(N))) @@ -298,7 +302,11 @@ * @endcode */ #ifndef MBED_NORETURN -#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) +#if __cplusplus >= 201103 +#define MBED_NORETURN [[noreturn]] +#elif __STDC_VERSION__ >= 201112 +#define MBED_NORETURN _Noreturn +#elif defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) #define MBED_NORETURN __attribute__((noreturn)) #elif defined(__ICCARM__) #define MBED_NORETURN __noreturn