Минут 15 сводил до минимального примера и думал, что же не так со следующим кодом:
#include <boost/bind.hpp>
#include <functional>
struct Foo {};
void foo(Foo&) {}
int main()
{
Foo instance;
boost::bind(
foo
, std::ref(instance)
);
}
MSVC-11.0 говорил следующее:
error C2558: class ‘boost::_bi::list1′ : no copy constructor available or copy constructor is declared ‘explicit’
На самом деле, проблема в том, что здесь одновременно используется как boost, так и стандартная библиотека – если заменить boost::bind на std::bind или std::ref на boost::ref, всё скомпилируется. Самое интересное, что данный код успешно компилируется без каких-либо изменений в MSVC-10.0.
Говорят, что в MSVC-12.0 данный код также компилируется без каких-либо ошибок, однако лично не проверял.