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"

Reply via email to