typedef enum
{
eval1,
eval2,
eval3
} enum_t;
_Static_assert(sizeof(enum_t) == 1, "enum_t must be 1 byte");
char dummy[sizeof(enum_t) == 1];
This code compiles if the _Static_assert
is commented out. The fact that dummy
compiles should mean that sizeof(enum_t) == 1
evaluates to true.
Why is my _Static_assert
not working?
Additional cases:
_Static_assert(sizeof(enum_t) >= 1, ""); // Passes
_Static_assert(sizeof(enum_t) == 1, ""); // Fails
_Static_assert(sizeof(enum_t) > 1, ""); // Fails
_Static_assert(!(sizeof(enum_t) > 1), ""); // Fails
I am using clang 13.0.0.
My command-line is: "C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 5.68/llvm/bin/clang" -cc1 -disable-free -disable-llvm-verifier -fgnuc-version=4.2.1 -mrelocation-model static -mconstructor-aliases -x c -fno-caret-diagnostics -fno-diagnostics-fixit-info -std=c17 -triple thumbv6m-none-eabi -target-cpu cortex-m0 -target-feature +strict-align -target-feature +soft-float -target-feature +soft-float-abi -msoft-float -target-abi aapcs -mfloat-abi soft -fno-signed-char -fallow-half-arguments-and-returns -mllvm -arm-global-merge=false -nostdsysteminc -nobuiltininc "-isystemC:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 5.68/segger-rtl/include" "-isystemC:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 5.68/include" -D__SIZEOF_WCHAR_T=4 -D__ARM_ARCH_6M__ -D__SES_ARM -D__HEAP_SIZE__=0 -D__SES_VERSION=56800 -D__SEGGER_LINKER -DDEBUG=1 -DUSE_RTT=1 -DSTM32G031xx -D__STM32G0xx_FAMILY -D__STM32G031_SUBFAMILY -DARM_MATH_CM0PLUS -sys-header-deps -Werror -dwarf-version=4 -debug-info-kind=standalone -debug-info-macro -debugger-tuning=gdb -mllvm -generate-arange-section -exception-model=dwarf -gpubnames -fno-dwarf-directory-asm -fmath-errno -ffunction-sections -fdata-sections -fshort-enums -fno-common test.c -emit-obj -o test.o -Wall -Wextra -Wpedantic -ffunction-sections -fdata-sections