Aren't we paying for Result types every time it's used? A result of a 64 bit value wouldn't fit into $eax for example (I understand there are exceptions to this rule through invalid bit pattern optimizations)
Apologies, I mean $rax
std::expected?
Just be aware that this is a variant and can't be returned via a register, but needs the stack. In (very) hot paths it can be worth switching back to single return values.