Richard Hodges wrote:
Forgive me chiming in late, but what is the semantic difference between:
enum class no_difference { _ }
expected<std::path, no_difference, std::error_code, std::exception_ptr>
and this:
using path_difference = std::variant<std::path, no_difference>; using error = std::variant<std::error_code, std::exception_ptr>;
expected<path_difference, error> return_first_diff(...);
There are various ways to represent the same four-state variant syntactically, and the main difference is in, well, syntax, when referring to it. You could, for example, use outcome<variant<std::path, no_difference>> (assuming a never-empty tri-state outcome) or outcome<optional<std::path>> At some point for a detailed comparison one would need to take a representative example and write down the user code under each alternative. You're right that in this case both "std::path" and "no_difference" seem more like values, although I don't remember how it was in Niall's original AFIO example.