куче) и прекрасно инлайнится, prooflink: https://gcc.godbolt.org/z/wqiYKj
C ним есть другие проблемы: он не умеет movать захваченые аргументы, а для того чтобы он их передавал по ссылке требуется делать, что-то не такое читаемое как с лямбдами, т.е. такая lambda в терминах `bind`просто невыразима
void do_smth(std::vector<int>);
std::vector v = ...;
auto f = [v = std::move(v)] { do_smth(std::move(v)); }
а такой выглядит неочевидно из-за std::ref:
void do_smth(std::vector<int> &);
std::vector v = ...;
auto f1 = [&v] { do_smth(v); }; // хорошо читаемо (ИМО)
auto f2 = std::bind(do_smth, std::ref(v)); // плохо читаемо (ИМО)
cc: @belgorodsky
Запоздалый вброс про bind: https://godbolt.org/z/3MPfZI Код версии с bind включает виртуальный вызов и исполняется на два порядка медленнее
Обсуждают сегодня