[committed 1/2] libstdc++: Reduce header dependencies in and on <memory>
Jonathan Wakely
jwakely@redhat.com
Fri Oct 23 00:13:28 GMT 2020
On 22/10/20 18:59 +0100, Jonathan Wakely wrote:
>By moving std::make_obj_using_allocator and the related "utility
>functions for uses-allocator construction" to a new header, we can avoid
>including the whole of <memory> in <scoped_allocator> and
><memory_resource>.
>
>In order to simplify the implementation of those utility functions they
>now use concepts unconditionally. They are no longer defined if
>__cpp_concepts is not defined. To simplify the code that uses those
>functions I've introduced a __cpp_lib_make_obj_using_allocator feature
>test macro (not specified in the standard, which might be an oversight).
>That allows the code in <memory_resource> and <scoped_allocator> to
>check the feature test macro to decide whether to use the new utilities,
>or fall back to the C++17 code.
>
>At the same time, this reshuffles some of the headers included by
><memory> so that they are (mostly?) self-contained. It should no longer
>be necessary to include other headers before <bits/shared_ptr.h> when
>other parts of the library want to use std::shared_ptr without including
>the whole of <memory>.
>
>libstdc++-v3/ChangeLog:
>
> * include/Makefile.am: Add new header.
> * include/Makefile.in: Regenerate.
> * include/bits/shared_ptr.h: Include <iosfwd>.
> * include/bits/shared_ptr_base.h: Include required headers here
> directly, instead of in <memory>.
> * include/bits/uses_allocator_args.h: New file. Move utility
> functions for uses-allocator construction from <memory> to here.
> Only define the utility functions when concepts are available.
> (__cpp_lib_make_obj_using_allocator): Define non-standard
> feature test macro.
> * include/std/condition_variable: Remove unused headers.
> * include/std/future: Likewise.
> * include/std/memory: Remove headers that are not needed
> directly, and are now inclkuded where they're needed. Include
> new <bits/uses_allocator_args.h> header.
> * include/std/memory_resource: Include only the necessary
> headers. Use new feature test macro to detect support for the
> utility functions.
> * include/std/scoped_allocator: Likewise.
> * include/std/version (__cpp_lib_make_obj_using_allocator):
> Define.
The recent changes to reduce includes in <memory_resource> went a bit
too far, and it's possible for std::forward_as_tuple to not be defined
when used.
While doing this, I noticed the problematic calls to forward_as_tuple
were not qualified, so performed unwanted ADL.
Fixed with this patch.
Tested powerpc64le-linux. Committed to trunk.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.txt
Type: text/x-patch
Size: 4259 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20201023/c689f941/attachment.bin>
More information about the Gcc-patches
mailing list