https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100940

--- Comment #8 from Patrick Palka <ppalka at gcc dot gnu.org> ---
(In reply to TC from comment #7)
> (In reply to Patrick Palka from comment #6)
> > 
> > For the other adaptors, we still unconditionally disable perfect forwarding
> > call wrapper semantics.  I'm not sure if the performance/diagnostic tradeoff
> > is worth it to enable perfect forwarding semantics when the function object
> > is non-trivial.
> 
> Personally, I'd happily pay some diagnostic complexity when I get things
> wrong if that means I get better performance when I get things right. Good
> diagnostics only matter when my code is broken, while performance matters
> when my code is working. The former should (hopefully) be a transient
> condition.

Sounds good; a followup patch that implements this is at
https://gcc.gnu.org/pipermail/gcc-patches/2021-June/572829.html

The patch limits the "simple" forwarding case to only trivially copyable extra
arguments, and does so for all adaptors.  So
take_while/drop_while/filter/transform(std::function) as well as
split(non_triv_copyable_view) would be considered non-simple under this
restriction.

Reply via email to