svn commit: r322875 - head/sys/dev/nvme

David Chisnall theraven at FreeBSD.org
Fri Aug 25 07:14:59 UTC 2017


On 25 Aug 2017, at 07:32, Mark Millard <markmi at dsl-only.net> wrote:
> 
> As I remember _Static_assert is from C11, not
> the older C99.

In pre-C11 dialects of C, _Static_assert is an identifier reserved for the implementation.  sys/cdefs.h defines it to generate a zero-length array if the condition is true or a negative-length array if it is false, emulating the behaviour (though giving less helpful error messages)

> 
> As I understand head/sys/dev/nvme/nvme.h use by
> C++ code could now reject attempts to use
> _Static_assert .

In C++, _Static_assert is an identifier reserved for the implementation, but in C++11 or newer static_assert is a keyword.  sys/cdefs.h defines _Static_assert to static_assert for newer versions of C++ and defines it to the C-before-11-compatible version for C++-before-11.

TL;DR: We have gone to a lot of effort to ensure that these keywords work in all C/C++ dialects, please use them, please report bugs if you find a case where they don’t work.

David



More information about the freebsd-stable mailing list