It seems the task_scheduler is forcing small object optimization - an attempt to use it with bigger objects will result in compilation error (poly has only copy/move constructors and construct for small objects).
From what I understood small object optimization is encouraged but doing dynamic allocation is still allowed - which would be helpful in case the scheduler is unknown and different than task_scheduler
I was interested in checking whether task can interoperate with different implementations, in particular I copied the implementation and put it in a different namespace so the types are different, which results in an error when task from different implementation is co_awaited