On Monday, 4 March 2024 at 09:53:17 UTC, Walter Bright wrote:
>It means I don't have to use ! in:
if (foo())
{
error();
return;
}
It's confusing how sometimes 0 is used for success, and other times 0 is used for failure.
For a boolean it makes more sense for true
to be success, so the Windows API uses it, as you can see in the PR:
if (!CloseHandle(h))
return Failure;
This reads as "if I could not close the handle, return failure".
There's often only 1 success state and many error states however. In that case you might want to return an int with multiple error codes, but there's only one 0. This code could also make sense:
if (auto errorCode = CloseHandle(h))
return errorCode;
Now the error case is 'truthy'. Unfortunately, I don't think D can help differentiate between the two cases to prevent mistakes when using APIs returning success / error states.