Я пытаюсь написать пример с обещанием / будущим. На примере в этой справочной странице они делают это, и это прекрасно работает в их онлайн-компиляторе. Когда я делаю это на моем Mac (с исходным кодом внизу), я получаю эту ошибку, указывающую на отсутствие оператора перемещения. Может кто-нибудь сказать мне, что не так?
Заголовочный файл:
#ifndef Demonstration9_hpp
#define Demonstration9_hpp
#include <iostream>
#include <thread>
#include <future>
using namespace std;
inline namespace demo9
{
class Demonstration9
{
private:
bool Job1();
void Job2();
public:
void Run();
};
}
#endif /* Demonstration9_hpp */
Исходный файл:
#include "Demonstration9.hpp"
bool job1(string test_string)
{
this_thread::sleep_for(chrono::milliseconds(500));
return test_string == "test";
}
void job2()
{
this_thread::sleep_for(chrono::milliseconds(500));
}
bool Demonstration9::Run()
{
promise<bool> j1_promise;
future<bool> j1_future = j1_promise.get_future();
thread t1(job1, "test", move(j1_promise));
j1_future.wait(); // wait for result
cout << "result=" << j1_future.get() << '\n';
t1.join(); // wait for thread completion
// Demonstrate using promise<void> to signal state between threads.
promise<void> j2_promise;
future<void> j2_future = j2_promise.get_future();
thread t2(job2, move(j2_promise));
j2_future.wait();
t2.join();
}
Журнал сборки:
В файле из
/Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:9: В
файл включен из
/Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.hpp:13:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:342:5:
ошибка: попытка использовать удаленную функцию
__invoke (_VSTD :: move (_VSTD :: get <1> (__t)), _VSTD :: move (_VSTD :: get <_Indices> (__t)) ...);
^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:352:5:
примечание: в реализации специализации шаблона функции
'std :: __ 1 :: __ thread_execute>, bool
(*) (std :: __ 1 :: basic_string), const char *,
std :: __ 1 :: обещание, 2, 3> 'запрашивается здесь
__thread_execute ( __p, _Index ());
^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:368:47:
примечание: в реализации специализации шаблона функции
'std :: __ 1 :: __ thread_proxy>, bool
(*) (std :: __ 1 :: basic_string), const char *,
std :: __ 1 :: обещание>> 'запрашивается здесь
int __ec = __libcpp_thread_create (& __t_, & __ thread_proxy <_Gp>, __p.get ());
^ /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:26:12:
примечание: в реализации специализации шаблона функции
'std :: __ 1 :: thread :: thread), символ
const (&) [5], std :: __ 1 :: обещание, void> 'запрашивается здесь
поток t1 (job1, «тест», move (j1_promise));
^ В файле, включенном в /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:9: В
файл включен из
/Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.hpp:12: В
файл включен из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iostream:38:
В файле из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ios:216:
В файле из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__locale:15:
В файле из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:470:
В файле из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string_view:169:
В файле из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__string:56:
В файле из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:640:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:1590:5:
примечание: '~ __nat' здесь явно помечено как удаленное
~ __nat () = удалить;
^ В файле, включенном в /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:9: В
файл включен из
/Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.hpp:13:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:342:5:
ошибка: попытка использовать удаленную функцию
__invoke (_VSTD :: move (_VSTD :: get <1> (__t)), _VSTD :: move (_VSTD :: get <_Indices> (__t)) ...);
^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:352:5:
примечание: в реализации специализации шаблона функции
'std :: __ 1 :: __ thread_execute>, void (*) (),std :: __ 1 :: обещание, 2> 'запрашивается здесь
__thread_execute ( __p, _Index ());
^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:368:47:
примечание: в реализации специализации шаблона функции
'std :: __ 1 :: __ thread_proxy>, void (*) (),
std :: __ 1 :: обещание>> 'запрашивается здесь
int __ec = __libcpp_thread_create (& __t_, & __ thread_proxy <_Gp>, __p.get ());
^ /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:34:12:
примечание: в реализации специализации шаблона функции
'std :: __ 1 :: thread :: thread, void>'
просили здесь
поток t2 (job2, move (j2_promise));
^ В файле, включенном в /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:9: В
файл включен из
/Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.hpp:12: В
файл включен из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iostream:38:
В файле из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ios:216:
В файле из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__locale:15:
В файле из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:470:
В файле из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string_view:169:
В файле из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__string:56:
В файле из
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:640:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:1590:5:
примечание: '~ __nat' здесь явно помечено как удаленное
~ __nat () = удалить;
^ 2 сгенерированных ошибки.