Skip to content
Snippets Groups Projects
Commit 5edc0c15 authored by Jonathan Wakely's avatar Jonathan Wakely
Browse files

libstdc++: Implement proposed resolution to LWG 3548

This has been tentatively approved by LWG. The deleter from a unique_ptr
can be moved into the shared_ptr (at least, since LWG 2802). This uses
std::forward<_Del>(__r.get_deleter()) not std::move(__r.get_deleter())
because we don't want to convert the deleter to an rvalue when _Del is
an lvalue reference type.

This also adds a missing is_move_constructible_v<D> constraint to the
shared_ptr(unique_ptr<Y, D>&&) constructor, which is inherited from the
shared_ptr(Y*, D) constructor due to the use of "equivalent to" in the
specified effects.

libstdc++-v3/ChangeLog:

	* include/bits/shared_ptr_base.h (__shared_count(unique_ptr&&)):
	Initialize a non-reference deleter from an rvalue, as per LWG
	3548.
	(__shared_ptr::_UniqCompatible): Add missing constraint.
	* testsuite/20_util/shared_ptr/cons/lwg3548.cc: New test.
	* testsuite/20_util/shared_ptr/cons/unique_ptr_deleter.cc: Check
	constraints.
parent f974b54b
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment