Возможный дубликат:
Visual Studio 2013 C++ — передача std::unique_ptr к связанной функции
Я следую Introduction to C++. параллельных видеоуроков LiveLessons, но столкнулись с проблемой. Конечно, у инструктора есть специальная сборка Visual Studio, которая позволяет ему компилировать следующий код, но для меня следующий код не компилируется в MSVC v120 или v140 Preview (Windows 8.1). Однако он компилируется в GCC 4.8.2 и Clang 3.4 (Ubuntu Linux 14.04):
#include <thread>
#include <future>
#include <memory>
#include <iostream>
#include <utility>
struct Counter
{
int n;
Counter(int k)
: n(k)
{
}
};
int main()
{
Counter* pCount = new Counter(10);
std::unique_ptr<Counter> puCount(pCount);
std::future<void> fut = std::async([](std::unique_ptr<Counter> p)
{
++(p->n);
}, std::move(puCount));
fut.wait();
}
Ошибка компилятора Visual Studio:
error C2280: 'std::unique_ptr<Counter,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': attempting to reference a deleted function
В моем быстром обзоре других вопросов кажется, что проблема заключается в существующей ошибке компилятора Visual Studio, когда он пытается сделать копию моего unique_ptr
вместо того, чтобы переместить его в мой вызов std::async
. Я также осмотрелся, но не смог найти ничего по теме в Функции C++14/14/17 в VS 2015 Preview в блоге.
Итак, мои вопросы:
- Правильно ли я предполагаю, что эта ошибка по-прежнему является проблемой предварительного просмотра MSVC v140?
- Есть ли у кого-нибудь дополнительная информация о том, исправит ли/когда команда компилятора или библиотеки эту проблему?
Кроме того, я знаю, что это не лучшая вещь когда-либо делать голый указатель только для того, чтобы обернуть его в unique_ptr
, оставляя голый указатель без дела. Это пример из видео плохой программы.