c++ – Multithreaded number printer in ordered manner

On recent interview I was asked to write program that print “Zero” and “One” to stdout from different threads, but in ordered manner:

zero
one
zero
one
zero
one
...

Now I decided to write more generalized solution and this is my first attempt:

#include <string>
#include <vector>
#include <mutex>
#include <initializer_list>
#include <condition_variable>
#include <thread>
#include <iostream>

struct OrderNumberPrinter
{
    OrderNumberPrinter(const std::initializer_list<std::string>& list)
        : m_len(list.size())
        , m_cv(list.size())
    {
        size_t num = 0;
        for(auto it = list.begin(); it != list.end(); ++it, ++num)
        {
            m_workers.emplace_back((this, num, message = *it)(){
                while(true)
                {
                    std::unique_lock<std::mutex> lock(m_printLock);
                    m_cv(num).wait(lock, (this, num)(){ return m_current == num; });
                    std::cout << message << "n";
                    std::this_thread::sleep_for(std::chrono::seconds(1));
                    ++m_current;
                    if (m_current == m_len)
                    {
                        m_current = 0;
                    }
                    m_cv(m_current).notify_one();
                }
            });
        }
    }

    ~OrderNumberPrinter()
    {
        for(auto& w: m_workers)
        {
            if (w.joinable())
            {
                w.join();
            }
        }
    }
private:
    int m_len = 0;
    int m_current = 0;
    std::vector<std::condition_variable> m_cv;
    std::mutex m_printLock;
    std::vector<std::thread> m_workers;
};

int main(int argc, char* argv())
{
    OrderNumberPrinter printer = {"zero", "one", "two", "three"};
    return 0;
}