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 данный код также компилируется без каких-либо ошибок, однако лично не проверял.
Re: boost::bind и std::ref
От: uzhas Ниоткуда  
Дата: 26.11.13 08:15
Оценка:
Здравствуйте, FrozenHeart, Вы писали:

FH>На самом деле, проблема в том, что здесь одновременно используется как boost, так и стандартная библиотека – если заменить boost::bind на std::bind или std::ref на boost::ref, всё скомпилируется. Самое интересное, что данный код


скорее всего это связано с тем, что внутри bind идут приседания, связанные с ref. каждый bind знает лишь о своем (из того же неймспейса) ref


FH>Говорят, что в MSVC-12.0 данный код также компилируется без каких-либо ошибок, однако лично не проверял.


это странно, т.к. буст работает лишь со своим reference_wrapper (смотрю на версии 1.53)
возможно, зависит от версии буста и ключей комиляции. буст может задействовать std::reference_wrapper теоретически
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.