aboutsummaryrefslogtreecommitdiff
path: root/libphobos/src
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2019-02-14 15:08:33 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2019-02-14 15:08:33 +0000
commitb7dbc6723a622c22140206005bfb1eb9ac7593f9 (patch)
treea6f827ea26d8782bc9139e813dfb2fc55e163674 /libphobos/src
parent6461bdc48fa3f98015584953598a83f8c7caa506 (diff)
downloadgcc-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