Перемещение std::unique_ptr в std::async

Возможный дубликат:

Visual Studio 2013 C++ — передача std::unique_ptr к связанной функции

Вызов функции, принимающей unique_ptr с помощью std::async

std::async с std::unique не компилируется

Я следую 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 в блоге.

Итак, мои вопросы:

  1. Правильно ли я предполагаю, что эта ошибка по-прежнему является проблемой предварительного просмотра MSVC v140?
  2. Есть ли у кого-нибудь дополнительная информация о том, исправит ли/когда команда компилятора или библиотеки эту проблему?

Кроме того, я знаю, что это не лучшая вещь когда-либо делать голый указатель только для того, чтобы обернуть его в unique_ptr, оставляя голый указатель без дела. Это пример из видео плохой программы.


person PythonJin    schedule 20.11.2014    source источник