Hello,

I've been wondering for a while if it's sensible to use Boost.System for transporting status_codes, rather than strictly error_codes. I'm aware than I *may* be trying to misuse the system library here, so I'll get straight to an example:

If I had an HTTP library that retrieved remote pages, I might want to use, as (a very crude) example:

template<typename MutableBufferSequence>
void get_page(http::connection& conn, MutableBufferSequence& buf)
{
  boost::system::error_code ec;
  conn.get_page(buf, ec);
  if (ec) throw ec;
}

The problem with relying on error_code to carry the errors is that the various success codes (eg. 200 OK, 201 ACCEPTED, 202 CREATED, etc.) seem to get lost, unless you class them as errors. Then you'd need something like:

- if (ec) throw ec;
+ if (ec >= http::ok || ec <= http::multi_status) throw ec;

It's not a massive pain, but having `ec == true` even when you don't have an error isn't helpful. AFAICT, any non-zero error value is an error that'll give `ec == true`.

I feel like I'm missing something here, please tell me if I am.

Regards,
Darren

PS. I'm trying to avoid having to make something that lies on top of boost::system::error_code, like a status_code class.