Como definir error_code como asio :: yield_context

Gostaria de criar uma função assíncrona que leva como último argumento boost :: asio :: yield_context. Por exemplo.:

int async_meaning_of_life(asio::yield_context yield);

Eu também gostaria de ser consistente com a forma como o Asio retorna códigos de erro. Ou seja, se o usuário fizer:

int result = async_meaning_of_life(yield);

e a função falhar, ele lança osystem_error exceção. Mas se o usuário fizer:

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

Então - em vez de jogar - o erro é retornado emec.

O problema é que, ao implementar a função, parece que não consigo encontrar uma maneira limpa de verificar se o operador [] foi usado ou não e configurá-lo, se for o caso. Chegamos a algo assim:

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

Mas isso é hacky, porqueyield_context::ec_ édeclarado privado (embora apenas na documentação).

Outra maneira de pensar em fazer isso é converter oyield objeto emasio::handler_type e execute. Mas essa solução parece estranha, na melhor das hipóteses.

Existe outro caminho?

questionAnswers(1)

yourAnswerToTheQuestion