title: Error: "Attempt to use a deleted function" when moving a promise
body: <p>I am trying to write an example with a promise/future in it. On the example in <a href="http://en.cppreference.com/w/cpp/thread/promise" rel="nofollow noreferrer">this reference page</a> they do it and it works just fine in their online compiler. When I do it on my Mac (with the sourcecode down below) it will throw me this error indicating there is no move operator. Can someone tell me what is wrong?</p>
  
  <p>Header file:</p>
  
  <pre><code>#ifndef Demonstration9_hpp
  #define Demonstration9_hpp
  
  #include &lt;iostream&gt;
  #include &lt;thread&gt;
  #include &lt;future&gt;
  
  using namespace std;
  
  inline namespace demo9
  {
      class Demonstration9
      {
      private:
          bool Job1();
          void Job2();
  
      public:
          void Run();
      };
  }
  
  #endif /* Demonstration9_hpp */
  </code></pre>
  
  <p>Source file:</p>
  
  <pre><code>#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&lt;bool&gt; j1_promise;
      future&lt;bool&gt; j1_future = j1_promise.get_future();
      thread t1(job1, "test", move(j1_promise));
      j1_future.wait();  // wait for result
      cout &lt;&lt; "result=" &lt;&lt; j1_future.get() &lt;&lt; '\n';
      t1.join();  // wait for thread completion
  
      // Demonstrate using promise&lt;void&gt; to signal state between threads.
      promise&lt;void&gt; j2_promise;
      future&lt;void&gt; j2_future = j2_promise.get_future();
      thread t2(job2, move(j2_promise));
      j2_future.wait();
      t2.join();
  }
  </code></pre>
  
  <p>Build Log:</p>
  
  <blockquote>
    <p>In file included from
    /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:9: In
    file included from
    /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.hpp:13:
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:342:5:
    error: attempt to use a deleted function
        __invoke(_VSTD::move(_VSTD::get&lt;1>(__t)), _VSTD::move(_VSTD::get&lt;_Indices>(__t))...);
        ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:352:5:
    note: in instantiation of function template specialization
    'std::__1::__thread_execute >, bool
    (*)(std::__1::basic_string), const char *,
    std::__1::promise , 2, 3>' requested here
        __thread_execute(<em>__p, _Index());
        ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:368:47:
    note: in instantiation of function template specialization
    'std::__1::__thread_proxy >, bool
    (*)(std::__1::basic_string), const char *,
    std::__1::promise > >' requested here
        int __ec = __libcpp_thread_create(&amp;__t_, &amp;__thread_proxy&lt;_Gp>, __p.get());
                                                  ^ /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:26:12:
    note: in instantiation of function template specialization
    'std::__1::thread::thread), char
    const (&amp;)[5], std::__1::promise , void>' requested here
        thread t1(job1, "test", move(j1_promise));
               ^ In file included from /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:9: In
    file included from
    /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.hpp:12: In
    file included from
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iostream:38:
    In file included from
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ios:216:
    In file included from
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__locale:15:
    In file included from
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:470:
    In file included from
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string_view:169:
    In file included from
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__string:56:
    In file included from
    /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:
    note: '~__nat' has been explicitly marked deleted here
        ~__nat() = delete;
        ^ In file included from /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:9: In
    file included from
    /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.hpp:13:
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:342:5:
    error: attempt to use a deleted function
        __invoke(_VSTD::move(_VSTD::get&lt;1>(__t)), _VSTD::move(_VSTD::get&lt;_Indices>(__t))...);
        ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:352:5:
    note: in instantiation of function template specialization
    'std::__1::__thread_execute >, void (*)(),
    std::__1::promise , 2>' requested here
        __thread_execute(</em>__p, _Index());
        ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:368:47:
    note: in instantiation of function template specialization
    'std::__1::__thread_proxy >, void (*)(),
    std::__1::promise > >' requested here
        int __ec = __libcpp_thread_create(&amp;__t_, &amp;__thread_proxy&lt;_Gp>, __p.get());
                                                  ^ /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:34:12:
    note: in instantiation of function template specialization
    'std::__1::thread::thread , void>'
    requested here
        thread t2(job2, move(j2_promise));
               ^ In file included from /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:9: In
    file included from
    /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.hpp:12: In
    file included from
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iostream:38:
    In file included from
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ios:216:
    In file included from
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__locale:15:
    In file included from
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:470:
    In file included from
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string_view:169:
    In file included from
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__string:56:
    In file included from
    /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:
    note: '~__nat' has been explicitly marked deleted here
        ~__nat() = delete;
        ^ 2 errors generated.</p>
  </blockquote>