Search code examples
cmacrosfeature-detectionc11static-assert

How to detect if a compiler supports static_assert?


I want to detect, in source file, if the compiler used supports static_assert.


Solution

  • In c11, static_assert is an assert.h macro that expands to _Static_assert.

    You can just use:

    #include <assert.h>
    
    #if defined(static_assert)
    // static_assert macro is defined
    #endif
    

    Note that some compilers (e.g., IAR) also have a static_assert keyword extension even if they don't support C11.

    As mentioned in the comments you can also check for c11:

    #if (__STDC_VERSION >= 201112L)
    // it is c11, static_assert is defined when assert.h is included
    #endif