Another variant that works is to create your thread object in the vector.push_back call. No need to call std::move in this case because its already an rvalue (thus it will be be moved).
for (int &reader : readers)
readerThreads.push_back(std::thread(readerThread::start, reader));