diff --git a/include/diy/master.hpp b/include/diy/master.hpp
index ac056fb0875e91f8a85ce6efdd1276d0baf74d4f..cb47ad2c7025332c902831bd20518d1268d1cd15 100644
--- a/include/diy/master.hpp
+++ b/include/diy/master.hpp
@@ -671,9 +671,9 @@ iexchange_(const ICallback<Block>& f)
     IExchangeInfoCollective iexchange(comm_, prof);
     iexchange.add_work(size());                 // start with one work unit for each block
 
-    std::thread comm_thread;
+    thread comm_thread;
     if (threads() > 1)
-        comm_thread = std::thread([this,&iexchange]()
+        comm_thread = thread([this,&iexchange]()
         {
             while(!iexchange.all_done())
             {
diff --git a/include/diy/no-thread.hpp b/include/diy/no-thread.hpp
index ee8c59febc7aff6218eb0ff67667985c4ae9aab5..12533c0f610d08a9a853d937a722a09834af501b 100644
--- a/include/diy/no-thread.hpp
+++ b/include/diy/no-thread.hpp
@@ -18,6 +18,8 @@ namespace diy
     template<class Function, class... Args>
     explicit            thread(Function&& f, Args&&... args)      { f(args...); }       // not ideal, since it doesn't support member functions
 
+    thread&             operator=(thread&&)                       = default;
+
     void                join()                                    {}
 
     static unsigned     hardware_concurrency()                    { return 1; }