我试图让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错误?
答案 0 :(得分:2)
可能是一个错误。它可以用g ++ 4.7编译。