anchor.diff:  ----
   #define INFORM_ERROR_RETURN_VOID(ERR, TAG)
   ----
  +Set an error pointer `ERR` to a particular error `TAG`, and return void. If `ERR` is `NULL`,
  +this is essentially a just a return statement.
  +
  +*Example:*
  +[source,c]
  +----
  +void double_values(int *array, size_t n, inform_error *err)
  +{
  +    if (!array)
  +    {
  +        INFORM_ERROR_RETURN(err, INFORM_EFAULT);
  +    }
  +    for (size_t i = 0; i < n; ++i)
  +    {
  +        array[i] *= 2;
  +    }
  +}
  +----
  +
  +[horizontal]
  +See also::
  +    <<inform_error_macro, INFORM_ERROR>>,
  +    <<inform_error_return_macro, INFORM_ERROR_RETURN>>
   ****
   
   ****
  
positive.code: ----
  #define INFORM_ERROR(ERR, TAG)
  ----
  ****
  
  ****
  
negative.code: :inform_error: <<inform_error,inform_error>>
  [[error-handling]]
  = Error Handling
  
  [[error-handling-intro]]
  == Introduction
  
  Much of the time invested in *Inform* has been ensuring that errors are properly handled.
  Since *Inform* is designed to be used both natively and wrapped for use in another language,
  we needed a simple way to provide error information while still being complete. The result
  was the {inform_error} enumeration.
  
  Most of *Inform*'s functions take a pointer to an {inform_error} as a last argument. This
  allows the function to pass error information up the call stack. Below is a standard example
  of how to handle errors which arise during standard usage:
  
  [source,c]
  ----
  size_t const n = 1, m = 7, k = 2;
  
  // expect only binary states
  int const base = 2;
  // state 5 is invalid
  int const series[] = {0,0,1,1,2,0,1};
  
  // Don't forget to initialize the error
  inform_error err = INFORM_SUCCESS;
  double ai = inform_active_info(series, n, m, k, base, &err);
  if (inform_failed(&err))
  {
      // ERROR: time series has states inconsistent with expected base
      fprintf(stderr, "ERROR: %s\n", inform_strerror(&err));
      return -1;
  }
  ----
  
  Most functions also return a value which signifies erroneous results. If the user is
  uninterested in the specific error message, then they can simply ignore it by passing a
  `NULL` pointer.
  
  [source,c]
  ----
  double ai = inform_active_info(series, n, m, k, base, NULL);
  if (isnan(ai))
  {
      fprintf(stderr, "ERROR: an error occurred in computing AI\n");
      return -1;
  }
  ----
  
  We *strongly* recommend that you handle errors. This is both good style and helps immensely
  when there's actually a problem.
  
  This covers the most common use cases for non-developers. If you are a developer, we
  strongly suggest that you review the rest of the <<error-handling-api,error handling API>>.
  Otherwise, you'd probably be better served by moving on to the more interesting stuff such
  as <<time-series-measures, Time Series Measures>>.
  
  [[error-handling-api]]
  == API Documentation
  
  [horizontal]
  Type Definitions::
      <<inform_error,inform_error>>
  Macros::
      <<inform_error_macro,INFORM_ERROR>>,
      <<inform_error_return_macro,INFORM_ERROR_RETURN>>,
      <<inform_error_return_void_macro,INFORM_ERROR_RETURN_VOID>>
  Error Tests::
      <<inform_succeeded,inform_succeeded>>,
      <<inform_failed,inform_failed>>
  Error Messages::
      <<inform_strerror,inform_strerror>>
  
  ****
  [[inform_error]]
  