On Wed, 30 Dec 2015, David Chisnall wrote:

On 30 Dec 2015, at 00:48, Bruce Evans <b...@optusnet.com.au> wrote:

- C++ apparently spells this as both _Alignof() and alignof() after 2011/03

This is not correct.  C++ spells it alignof.  C spells it _Alignof, unless you 
include <stdalign.h>, in which case C spells it alignof and defines _ 
_alignof_is_defined.

On FreeBSD, we define _Alignof in C++ mode, because it???s in the reserved 
identifier space and gives us something that works in C and C++.

So it is more broken than first appeared :-).  Extra spellings are a bug
since users don't know which one to use and prefer the worst one unless
they are experts in at least 3 versions of 3 standards (C-K&R, C90, C99,
C11, C++-mumble, gnu89, gnu99, gnu11) and FreeBSD variations on these.

There are also syntactical problems.  stdalign.h uses _Alignas and _Alignof,
but FreeBSD only defines _Alignas(x) and _Alignof(x).  The former is because
alignof is like sizeof so it doesn't need parentheses.  However,
alignof(typename) needs the parentheses and 'alignof expression' is apparently only a gnu extension, so it is difficult to construct an
example of Standard code without the parentheses.

_Alignas is more broken than _Alignof.  In the C case, _Alignas(x) is as
__aligned(x), but this only works if x is an expression.  __aligned(x)
is often used in FreeBSD code, but the same code in C++ with __aligned(x)
replaced by alignas(x) with any spelling is a syntax error.

Bruce
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to