Преобразование из unique_future
в shared_future
использует следующий конструктор в документации :
shared_future(unique_future<R> && other);
При этом используется ссылка rvalue, чтобы убедиться, что она ясна в исходном кодечто вы намеревались уничтожить ценность «другого».Вполне возможно, что VC ++ 2010 по умолчанию предоставляет достаточно поддержки ссылок на rvalue, чтобы поддерживать это напрямую, в то время как компилятору, который вы используете в linux (вероятно, gcc), требуется дополнительный флаг, такой как -std=gnu++0x
, для его поддержки.Без этого флага boost возвращается к «эмуляции перемещения», которая может (я не проверял это) потребовать от вас написать:
boost::shared_future<task_return_t> fi = boost::move(pt->get_future());