boost::bind и std::ref
От: FrozenHeart  
Дата: 26.11.13 07:19
Оценка:
Минут 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 данный код также компилируется без каких-либо ошибок, однако лично не проверял.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.