Здравствуйте, rg45, Вы писали:
R>Почему так сделано — это понятно. Но ошибку искал часа полтора. Так что, будьте осмотрительны, остерегайтесь выходить на болота в ночное время ну, в общем, вы поняли.
Вот поэтому всегда лучше вместо std::bind писать лямбды и руками в них делать, что хочешь.
Это и нагляднее, и меньше внезапных спецэффектов.
auto f = std::bind(foo, _1, _1);
auto g = [foo](auto a) { foo(a, a); };
Бинд ещё и с арностью довольно свободно обращается.
f(std::string("Hello"), 100, 200); // сколько-угодно-арная функция же! просто возьмём только _1
g(std::string("Hello"), 100, 200); // ошибка компиляции, всё честно
А уж какие нечеловекочитаемые ошибки компиляции выводит бинд, по сравнению с лямбдой...