https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111327
Bug ID: 111327
Summary: std::bind_front doesn't perfectly forward according to
value category of the call wrapper object
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: ppalka at gcc dot gnu.org
Target Milestone: ---
Testcase:
#include <functional>
struct F {
void operator()() & = delete; // #1
void operator()() const &; // #2
};
int main() {
auto f = F{};
auto g = std::bind_front(F{});
f(); // error: use of deleted function
g(); // incorrectly calls #2 instead of being ill-formed
}
Since f isn't invocable as a non-const lvalue, g shouldn't be either.