#include enum ErrorX { one, two = 5, three, NoError }; // operator bool static_assert(!(Result{ErrorX::one})); static_assert(!(Result{ErrorX::two})); static_assert((Result{5})); // error static_assert((Result{ErrorX::one}).error() == ErrorX::one); static_assert((Result{5}).error() == ErrorX::NoError); // value static_assert((Result{ErrorX::one}).value() == int{}); static_assert((Result{5}).value() == 5);