Вызов функции, принимающей unique_ptr с помощью std :: async - PullRequest
1 голос
/ 08 декабря 2011

Я пытаюсь заставить std::async запустить функцию, которая принимает unique_ptr с gcc 4.6.2:

#include <type_traits>
#include <memory>
#include <functional>
#include <future>

struct Foo {};

// my gcc does not have this, same definition as in 30.2.6
template<typename T>
typename std::decay<T>::type decay_copy(T&& v) { return std::forward<T>(v); }

int main() {
  std::function<int(std::unique_ptr<Foo>)> f = [](std::unique_ptr<Foo>) { return 23; };

  std::unique_ptr<Foo> fp{new Foo};
  std::unique_ptr<Foo> fp2{std::move(fp)};
  // works, this seems to satisfy the requirements of async
  f(decay_copy(std::move(fp2)));

  // does not work with reference to a deleted function
  // std::async(f, std::move(fp2));
}

Это ожидаемое поведение или это ошибка gcc?

1 Ответ

2 голосов
/ 08 декабря 2011

Вероятно, ошибка.Его можно скомпилировать с помощью g ++ 4.7.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...