anchor.diff:  ----
   #define INFORM_ERROR_RETURN(ERR, TAG, RET)
   ----
  +Set an error pointer `ERR` to a particular error `TAG`, and return a value `RET`. If `ERR`
  +is `NULL`, this is essentially a just a return statement.
  +
  +*Example:*
  +[source,c]
  +----
  +int *double_values(int *array, size_t n, inform_error *err)
  +{
  +    if (!array)
  +    {
  +        INFORM_ERROR_RETURN(err, INFORM_EFAULT, array);
  +    }
  +    for (size_t i = 0; i < n; ++i)
  +    {
  +        array[i] *= 2;
  +    }
  +    return array;
  +}
  +----
  +
  +[horizontal]
  +See also::
  +    <<inform_error, INFORM_ERROR>>,
  +    <<inform_error_return_void_macro, INFORM_ERROR_RETURN_VOID>>
   ****
   
   ****
  
positive.code: ----
  bool inform_failed(inform_error const *err);
  ----
  ****
  
  ****
  
negative.code: ----
  char const *inform_strerror(inform_error const *err);
  ----
  Return a string describing an error.
  
  *Examples:*
  [source,c]
  ----
  inform_error err = INFORM_SUCCESS;
  
  // Successes
  assert(strcmp(inform_strerror(NULL), "no error occurred") == 0);
  assert(strcmp(inform_strerror(&err), "no error occurred") == 0);
  
  // Failures
  err = INFORM_FAILURE;
  assert(strcmp(inform_strerror(&err),
                "an unspecified error occurred") == 0);
  err = INFORM_ENOMEM;
  assert(strcmp(inform_strerror(&err),
                "malloc/calloc/realloc failed") == 0);
  ----
  
  [horizontal]
  See also::
      <<inform_error, inform_error>>
  ****
  