public/private for task::pimpl