https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108290
Bug ID: 108290 Summary: QoI: bind_front captureless lambda is too big Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: lichray at gmail dot com Target Milestone: --- libstdc++ does not give the following guarantee, while libc++ and MS STL can: auto captureless = [](FILE *, void *, size_t) { return 0; }; static_assert(sizeof(std::bind_front(captureless, stdin)) == sizeof(stdin)); See https://godbolt.org/z/TrWP6KohG The expectation is that some form of EBO is implemented to treat the empty callable as the base. libc++ did this by laying down all state entities in a std::tuple. MS STL did this by storing compressed_pair<target, std::tuple<bound_args>> (so they have this optimization even when their std::tuple doesn't do EBO).