Skip to content
Snippets Groups Projects
Commit 09d1cbee authored by Patrick Palka's avatar Patrick Palka
Browse files

libstdc++: Fix views::transform(move_only_fn{}) forwarding [PR118413]


The range adaptor perfect forwarding simplification mechanism is currently
only enabled for trivially copyable bound arguments, to prevent undesirable
copies of complex objects.  But "trivially copyable" is the wrong property
to check for here, since a move-only type with a trivial move constructor
is considered trivially copyable, and after P2492R2 we can't assume copy
constructibility of the bound arguments.  This patch makes the mechanism
more specifically check for trivial copy constructibility instead so
that it's properly disabled for move-only bound arguments.

	PR libstdc++/118413

libstdc++-v3/ChangeLog:

	* include/std/ranges (views::__adaptor::_Partial): Adjust
	constraints on the "simple" partial specializations to require
	is_trivially_copy_constructible_v instead of
	is_trivially_copyable_v.
	* testsuite/std/ranges/adaptors/adjacent_transform/1.cc (test04):
	Extend P2494R2 test.
	* testsuite/std/ranges/adaptors/transform.cc (test09): Likewise.

Reviewed-by: default avatarJonathan Wakely <jwakely@redhat.com>
parent dc6b949c
Loading
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