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-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"