r268882 - in /trunk/libstdc++-v3: ChangeLog doc...

redi@gcc.gnu.org redi@gcc.gnu.org
Thu Feb 14 15:08:00 GMT 2019


Author: redi
Date: Thu Feb 14 15:08:33 2019
New Revision: 268882

URL: https://gcc.gnu.org/viewcvs?rev=268882&root=gcc&view=rev
Log:
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.

Added:
    trunk/libstdc++-v3/testsuite/20_util/scoped_allocator/dr2586.cc
      - copied, changed from r268879, trunk/libstdc++-v3/testsuite/20_util/uses_allocator/cons_neg.cc
Modified:
    trunk/libstdc++-v3/ChangeLog
    trunk/libstdc++-v3/doc/xml/manual/intro.xml
    trunk/libstdc++-v3/include/bits/uses_allocator.h
    trunk/libstdc++-v3/testsuite/20_util/scoped_allocator/69293_neg.cc
    trunk/libstdc++-v3/testsuite/20_util/tuple/cons/allocators.cc
    trunk/libstdc++-v3/testsuite/20_util/uses_allocator/69293_neg.cc
    trunk/libstdc++-v3/testsuite/20_util/uses_allocator/cons_neg.cc



More information about the Libstdc++-cvs mailing list