On 2/27/20 2:45 PM, Mark Millard wrote: > John Baldwin jhb at FreeBSD.org wrote on > Thu Feb 27 16:55:01 UTC 2020: > >> On 2/27/20 7:30 AM, Warner Losh wrote: >>> Author: imp >>> Date: Thu Feb 27 15:30:13 2020 >>> New Revision: 358392 >>> URL: https://svnweb.freebsd.org/changeset/base/358392 >>> >>> Log: >>> _Static_assert is to be preferred to CTASSERT. >>> >>> Document the existing prefernce that _Static_assert be used in preference >>> to the >>> old CTASSERT we used to use for compile time assertions. >> >> Actually, I think what we want to use is static_assert(). The intention in >> userland C is that _Static_assert() is an internal keyword and <assert.h> >> adds static_assert() as an alias, similar to <stdalign.h> defining alignas, >> etc. I think what we should do for the kernel is have <sys/systm.h> define >> map static_assert to _Static_assert and replace existing _Static_assert >> usage with the proper spelling. >> > > Be warned static_assert is a C++ keyword as of C++11. > > c++11 added: static_assert(bool_constexpr,message) > c++17 added: static_assert(bool_constexpr) > > C11 added _Static_assert(expression,message) > C2x gets _Static_assert(expression) > > C11 added "#define static_assert _Static_assert" to <assert.h> > > It makes for a bit of a mess in code to be allowed > to be processed by both C and C++. > > The wording may need to specify enough to tell what to > do for such code and the headers may need logic to > cause that context to exist across both languages > when the header is allowed for both.
The intent of the C11 changes is to permit equivalent use of static_assert() in both languages. The #define in <assert.h> is guarded to not kick in for C++. -- John Baldwin _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"