assert.h
========

POSIX specification:
 https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/assert.h.html

Gnulib module: assert-h

See also the Gnulib modules assert and verify.

Portability problems fixed by Gnulib:

  * On older platforms static_assert and _Static_assert do not allow the second string-literal argument to be omitted.  For example, GCC versions before 9.1 do not support the single-argument static_assert that was standardized by C2X and C++17.

  * Even-older platforms do not support static_assert or _Static_assert at all.  For example, GCC versions before 4.6 do not support _Static_assert, and G++ versions before 4.3 do not support static_assert, which was standardized by C11 and C++11.

Portability problems not fixed by Gnulib:

  * C _Static_assert and C++ static_assert are keywords that can be used without including <assert.h>. The Gnulib substitutes are macros that require including <assert.h>.

  * The C static_assert and _Static_assert can also be used within a struct or union specifier, in place of an ordinary declaration of a member of the struct or union.  The Gnulib substitute can be used only as an ordinary declaration.

  * In C99 and later, assert can be applied to any scalar expression. In C89, the argument to assert is of type int.