Using a Result
This models the earlier C++ example of use, and its C equivalent isn’t much more verbose thanks to our helper typedefs and macros:
result positive_only(int x)
{
if(x < 0)
{
return FAILURE(c_enum_bad_argument);
}
return SUCCESS(x);
}
bool test(int x)
{
result r = positive_only(x);
if(BOOST_OUTCOME_C_RESULT_HAS_ERROR(r))
{
if(outcome_status_code_equal_generic(&r.error, EINVAL))
{
fprintf(stderr, "Positive numbers only!\n");
return false;
}
}
return true;
}
For this to link, the BOOST_OUTCOME_C_DECLARE_RESULT_SYSTEM_FROM_ENUM
macro needs to be
compiled at least once within C++ within the final binary to emit the extern
functions needed by C.