for (auto & s : seq) s.on_setup(*this); if (error()) { for (auto & s : seq) s.on_error(*this, error()); return child(); } int err_code = CreateProcess( exe, cmd_line, proc_attrs, thread_attrs, creation_flags, env, work_dir, startup_info, proc_info); child c(proc_info, exit_code); if (error()) for (auto & s : seq) s.on_error(*this, error()); else for (auto & s : seq) s.on_success(*this); //now we check again, because a on_success handler might've errored. if (error()) { for (auto & s : seq) s.on_error(*this, error()); return child(); } else return c;