Implement C1X _Alignas, _Alignof, max_align_t, stdalign.h
Jonathan Wakely
jwakely.gcc@gmail.com
Mon Nov 7 09:58:00 GMT 2011
On 7 November 2011 08:47, Jonathan Wakely wrote:
> On 7 November 2011 00:43, Jonathan Wakely wrote:
>> On 7 November 2011 00:37, Joseph S. Myers wrote:
>>> On Mon, 7 Nov 2011, Jonathan Wakely wrote:
>>>
>>>> On 6 November 2011 23:53, Joseph S. Myers wrote:
>>>> >
>>>> > As with stdnoreturn.h, the contents of stdalign.h are conditioned out
>>>> > for C++; I'll leave it to C++ people to work out what's most useful
>>>> > there if something nonempty is wanted (stdnoreturn.h is empty for C++,
>>>> > stdbool.h defines _Bool and bool to bool, true to true etc.).
>>>>
>>>> Thanks Joseph, that will allow use to provide <cstdalign> in libstdc++.
>>>>
>>>> By my reading of the C++11 standard, the __alignas_is_defined macro
>>>> should still be defined in C++, and alignof isn't mentioned, was that
>>>> a late addition to C1X?
>>>
>>> The move from alignof as a keyword to _Alignof as a keyword with alignof
>>> as a macro in stdalign.h was done at the London meeting (March 2011) in
>>> response to comment US20. stdnoreturn.h was also added at that meeting.
>>
>> Thanks for the info. I think treating alignof identically to alignas
>> for C++ makes sense then - the __alignof_is_defined macro is in the
>> reserved namespace so it's OK for a conforming C++11 implementation to
>> define it.
>>
>>> It looks like what GCC defines in stdbool.h for C++ goes beyond what C++11
>>> says it should ("The header <cstdbool> and the header <stdbool.h> shall
>>> not define macros named bool, true, or false.") stdint.h is another case
>>> needing adjustment for C++11, though there what I've suggested is that GCC
>>> should predefine __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS in C++11
>>> mode as the best way to work with all implementations of that header that
>>> follow what C99 footnotes suggest.
>>
>> Indeed - I was just noticing that the libstdc++ testsuite doesn't
>> check that stdbool.h doesn't define those macros.
>
>
> This patch adds <cstdalign> to libstdc++
>
> * acinclude.m4: Check for <stdalign.h>
> * configure: Regenerate.
> * config.h.in: Likewise.
> * include/Makefile.am: Add <cstdalign>.
> * include/Makefile.in: Regenerate.
> * include/c_global/cstdalign: New.
> * testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc: New.
> * doc/xml/manual/backwards_compatibility.xml: Update.
> * doc/xml/manual/status_cxx2011.xml: Update.
>
> Tested x86_64-linux, committed to trunk.
And then this adjusts <stdalign.h> and <stdbool.h> for C++11 conformance.
C++11 requires stdbool.h so providing it is not a GCC extension, but
defining _Bool is. I don't see the point of defining bool, true and
false as macros in C++ and it's explicitly forbidden by C++11.
Personally I'd prefer if _Bool was a typedef rather than a macro, but
I haven't changed that.
gcc/ChangeLog:
* ginclude/stdalign.h (__alignas_is_defined, __alignof_is_defined):
Define for C++.
* ginclude/stdbool.h (bool, true, false): Do not define for C++.
libstdc++-v3/ChangeLog:
* testsuite/18_support/headers/cstdalign/macros.cc: New.
* testsuite/18_support/headers/cstdbool/macros.cc: New.
Tested x86_64-linux, OK for trunk?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cstd-macros.patch
Type: text/x-patch
Size: 3964 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20111107/0d7ce85a/attachment.bin>
More information about the Libstdc++
mailing list