mirror of git://gcc.gnu.org/git/gcc.git
Implement the forwarding performed by std::bind via deducing this when available, instead of needing 4 operator() overloads. Using deducing this here is more complicated than in other standard call wrappers because std::bind is not really "perfect forwarding": it doesn't consider value category, and along with const-ness it also forwards volatile-ness (until C++20). The old implementation suffers from the same problem that other pre-C++23 SFINAE-friendly call wrappers have which is solved by using deducing this (see p5.5 of the deducing this paper P0847R7). PR libstdc++/80564 libstdc++-v3/ChangeLog: * include/std/functional (__cv_like): New. (_Bind::_Res_type): Don't define when not needed. (_Bind::__dependent): Likewise. (_Bind::_Res_type_cv): Likewise. (_Bind::operator()) [_GLIBCXX_EXPLICIT_THIS_PARAMETER]: Define as two instead of four overloads using deducing this. * testsuite/20_util/bind/cv_quals_2.cc: Ignore SFINAE diagnostics inside headers. * testsuite/20_util/bind/ref_neg.cc: Likewise. * testsuite/20_util/bind/80564.cc: New test. Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com> Reviewed-by: Jonathan Wakely <jwakely@redhat.com> |
||
|---|---|---|
| .. | ||
| 35569.cc | ||
| 38889.cc | ||
| 42593.cc | ||
| 45924.cc | ||
| 48698.cc | ||
| 49058_1.cc | ||
| 49058_2.cc | ||
| 57899.cc | ||
| 60497.cc | ||
| 68912.cc | ||
| 79798.cc | ||
| 80564.cc | ||
| 83427.cc | ||
| 91371.cc | ||
| all_bound.cc | ||
| constexpr.cc | ||
| conv_result.cc | ||
| cv_quals.cc | ||
| cv_quals_2.cc | ||
| cv_quals_3.cc | ||
| dangling_ref.cc | ||
| is_placeholder_v.cc | ||
| move.cc | ||
| nested.cc | ||
| placeholders.cc | ||
| ref.cc | ||
| ref2.cc | ||
| ref_neg.cc | ||
| refqual.cc | ||
| socket.cc | ||