19    using InputStream = std::basic_istream<char>;
 
   20    using StreamBuffer = std::basic_streambuf<char>;
 
   22        using std::runtime_error::runtime_error;
 
 
   25    enum class ErrorCode {
 
   38        static_assert(std::is_integral<T>::value == 
true, 
"only integral types are supported");
 
   39        char* ptr = 
reinterpret_cast<char*
>(&t);
 
   40        load_binary(ptr, 
sizeof(T));
 
   44    void load_binary(
unsigned char* data, std::size_t len);
 
   45    void load_binary(
char* data, std::size_t len);
 
   47    std::size_t remaining_bytes();
 
   50    ErrorCode error_code() 
const;
 
   51    void fail(ErrorCode error_code);
 
   54    StreamBuffer* m_stream_buffer;
 
   55    ErrorCode m_error_code = ErrorCode::Ok;
 
 
   64    using OutputStream = std::basic_ostream<char>;
 
   65    using StreamBuffer = std::basic_streambuf<char>;
 
   67        using std::runtime_error::runtime_error;
 
 
   70    OutputArchive(OutputStream& os);
 
   71    OutputArchive(StreamBuffer& buf);
 
   74    OutputArchive& operator<<(
const T& t)
 
   76        static_assert(std::is_integral<T>::value == 
true, 
"only integral types are supported");
 
   77        const char* ptr = 
reinterpret_cast<const char*
>(&t);
 
   78        save_binary(ptr, 
sizeof(T));
 
   82    void save_binary(
const unsigned char* data, std::size_t len);
 
   83    void save_binary(
const char* data, std::size_t len);
 
   86    StreamBuffer* m_stream_buffer;