Here is a simpler program demonstrating the problem
#include <thread>
struct moveable
{
moveable() = default;
moveable(moveable&&) = default;
};
void f(moveable) { }
int main()
{
std::thread t(f, moveable());
t.join();
}
I think this should be quite easy to fix.