Le 19/03/13 19:40, Alexander Lamaison a écrit :
I'm trying to create a move-only object asyncronously using Boost.Thread unique_future but I'm running into trouble:
error C2248: 'A::A' : cannot access private member declared in class 'A' c:\users\awl03\documents\visual studio 2005\projects\boost_1_51_0\boost\thread\future.hpp 493
I've tried all sorts of ways to work around this but always end up with some variation or other of this error message. What am I doing wrong?
The code is below. The setup is: Visual Studio 2005 Boost 1.51
Thanks, Alex
#include
#include #include #include using namespace boost;
class A : public noncopyable { BOOST_MOVABLE_BUT_NOT_COPYABLE(A)
public: A(int i) {}
A(BOOST_RV_REF(A) other) {}
A& operator=(BOOST_RV_REF(A) other) {}
};
A create_a() { return A(42); }
unique_future<A> async_create_a() { packaged_task<A> task(create_a); unique_future<A> result = task.get_future(); thread(move(task)).detach(); return move(result); }
int main() { A a = async_create_a().get(); return 0; }
Hi,
you need to use version 4 to got this functionality. I have modified
your example to use boost::future (*) and use packaged_task with a
signature parameter (**). With this change it to works for the following
toolsets.
bjam
toolset=darwin,darwin-4.6.2,darwin-4.7.1,clang-3.1,clang-3.2,darwin-latest,darwin-4.7.2
-l 300 variant=debug -j6
bjam
toolset=darwin,darwin-4.6.2,darwin-4.7.1,clang-3.1,clang-3.2,darwin-latest,darwin-4.7.2
-l 300 variant=debug -j6 ts_
iMac-de-Vicente-Botet-Escriba:test viboes$
Best,
Vicente
#define BOOST_THREAD_VERSION 4
#include