Что насчёт оверхеда? Если там на каждый вызов в итоге происходит проверка успех/провал, то это то же самое что и коды ошибки, и это медленнее исключений в общем случае
Не думаю, что я достаточно компетентен, чтобы сравнивать производительность этих двух решений. В прикладном коде меня больше волнует выразительность.
Но по сути, это те же коды ошибок, без сопутствующих исключениям RTTI и раскрутки стека. Могут ли коды возврата быть медленнее исключений?