You give 3 `threadpool` constructors:

    threadpool::threadpool()
        : threadpool(std::thread::hardware_concurrency())
    { };

    threadpool::threadpool(size_t concurrency)
        : threadpool(concurrency, 128)
    { };

    threadpool::threadpool(size_t concurrency, size_t queue_size)

You could use one `threadpool` constructor with default arguments:

    threadpool::threadpool(
            size_t concurrency=std::thread::hardware_concurrency()
          , size_t queue_size=128
    )