Одна из замечательных особенностей Boost.Bind - это возможность "втирать" функцию в несколько иную сигнатуру.
Например, вы можете заставить свой пример fool3
работать, явно указавзначение для второго параметра:
mywait(boost::bind(fool3, _1, "extra parameter"));
// or even:
mywait(boost::bind(fool3, "extra parameter", _1));
Любые параметры, передаваемые в функцию, которые не используются (посредством _ n ), просто игнорируются при вызове функции.