diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-02-14 15:08:33 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-02-14 15:08:33 +0000 |
commit | b7dbc6723a622c22140206005bfb1eb9ac7593f9 (patch) | |
tree | a6f827ea26d8782bc9139e813dfb2fc55e163674 /libphobos/src | |
parent | 6461bdc48fa3f98015584953598a83f8c7caa506 (diff) | |
download | gcc-b7dbc6723a622c22140206005bfb1eb9ac7593f9.zip gcc-b7dbc6723a622c22140206005bfb1eb9ac7593f9.tar.gz gcc-b7dbc6723a622c22140206005bfb1eb9ac7593f9.tar.bz2 |
DR 2586 fix value category in uses-allocator checks
Because uses-allocator construction is invariably done with a const
lvalue the __uses_alloc helper should use a const lvalue for the
is_constructible checks. Otherwise, it can detect that the type can be
constructed from an rvalue, and then an error happens when a const
lvalue is passed to the constructor instead.
Prior to LWG DR 2586 scoped_allocator_adaptor incorrectly used an rvalue
type in the is_constructible check and then used a non-const lvalue for
the actual construction. The other components using uses-allocator
construction (tuple and polymorphic_allocator) have always done so with
a const lvalue allocator, although the use of __use_alloc in our
implementation meant they behaved the same as scoped_allocator_adaptor
and incorrectly used rvalues for the is_constructible checks.
In C++20 the P0591R4 changes mean that all uses-allocator construction
is defined in terms of the new uses_allocator_construction_args
functions, which always use a const lvalue allocator.
The changes in this patch ensure that the __use_alloc helper correctly
matches the requirements in the standard, consistently using a const
lvalue allocator for the is_constructible checks and the actual
constructor arguments.
* doc/xml/manual/intro.xml: Document LWG 2586 status.
* include/bits/uses_allocator.h (__uses_alloc): Use const lvalue
allocator type in is_constructible checks.
* testsuite/20_util/scoped_allocator/69293_neg.cc: Adjust dg-error.
* testsuite/20_util/scoped_allocator/dr2586.cc: New test.
* testsuite/20_util/tuple/cons/allocators.cc: Add test using
problematic type from LWG 2586 discussion.
* testsuite/20_util/uses_allocator/69293_neg.cc: Adjust dg-error.
* testsuite/20_util/uses_allocator/cons_neg.cc: Likewise.
From-SVN: r268882
Diffstat (limited to 'libphobos/src')
0 files changed, 0 insertions, 0 deletions