Вы копируете fooBar
. Компилятор говорит, что вы не можете. Вы не можете этого сделать, потому что мьютекс не может быть скопирован.
std::thread foo_thread = std::thread(&FooBar::foo, std::ref(foobar), printFoo);
, и эта конкретная ошибка компилятора исчезнет. Без его построения я не могу быть уверен, что других проблем нет.
std::thread foo_thread = std::thread([&foobar]{ foobar.foo(printFoo); });
Это более разумный способ решения той же проблемы. Лямбды обычно лучше, чем использовать интерфейсы на основе INVOKE.