Cómo configurar error_code en asio :: yield_context

Me gustaría crear una función asincrónica que tome como último argumento boost :: asio :: yield_context. P.ej.:

int async_meaning_of_life(asio::yield_context yield);

También me gustaría ser coherente con la forma en que Asio devuelve códigos de error. Es decir, si el usuario hace:

int result = async_meaning_of_life(yield);

y la función falla, entonces arroja elsystem_error excepción. Pero si el usuario lo hace:

boost::error_code ec;
int result = async_meaning_of_life(yield[ec]);

Luego, en lugar de lanzar, el error se devuelve enec.

El problema es que al implementar la función, parece que no puedo encontrar una manera limpia de verificar si se utilizó o no el operador [] y configurarlo si es así. Se nos ocurrió algo como esto:

inline void set_error(asio::yield_context yield, sys::error_code ec)
{
    if (!yield.ec_) throw system_error(ec);
    *(yield.ec_) = ec;
}

Pero eso es hacky, porqueyield_context::ec_ esdeclarado privado (aunque solo en la documentación).

Otra forma en que puedo pensar en hacer esto es convertir elyield objetar enasio::handler_type y ejecutarlo Pero esta solución parece incómoda en el mejor de los casos.

¿Hay otra manera?

Respuestas a la pregunta(1)

Su respuesta a la pregunta