Throw std::runtime_errors in c++ rather than throwing raw c-style strings.
Adding error numbers to error messages to distinguish between errors with the same description from different parts of the system.
(i.e. "buffer too short.")
Use standards-compliant definition _WIN32 rather than non-standard WIN32 to detect windows builds.
Use INT_MIN, INT_MAX, LLONG_MIN, and LLONG_MAX rather than trying to define these as literals
(VC buglet rejects the obvious literal definition of the *_MIN) values.