Spec should specify: 1. when the function `F` passed into `run`/`run_and_wait` and `defer` is destroyed. 2. destroyed properly , i.e. it 's destructor is called 3. How does this relates to returning from `task_group::wait`