$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-users] boost.serializaion off by one error
From: . lai (linhualai_at_[hidden])
Date: 2011-04-25 23:25:51
Hi all:
Recently i come up with a problem in boost.serializaion when
serializing primitives.
with the following code, the output is:
1
0
input stream error
But what i expect is:
1
input stream error
test code:
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <sstream>
#include <iostream>
int main(int argc, char *argv[])
{
    std::stringstream stream;
    {
        boost::archive::text_oarchive oa(stream);
        int i = 1;
        oa << i;
    }
    try
    {
        boost::archive::text_iarchive ia(stream);
        int i = 0;
        ia >> i;
        std::cout << i << std::endl;
        i = 0;
        ia >> i;
        std::cout << i << std::endl;
        i = 0;
        ia >> i;
        std::cout << i << std::endl;
    }catch(boost::archive::archive_exception& ex){
        std::cout << ex.what() << std::endl;
    }
    return 0;
}
the exception is threw in  /usr/include/boost/archive/basic_text_iprimitive.hpp:
basic_text_iprimitive::
   template<class T>
   void load(T & t)
   {
       if(! is.fail()){
           is >> t;    //HERE SHOULD TEST IF READ IS SUCCUSSFULL
           return;
       }
       boost::serialization::throw_exception(
           archive_exception(archive_exception::input_stream_error)
       );
   }
In the function basic_text_iprimitive::load(T t), when T is a
primitive, and is >> t fails, there is no exception threw, where there
should.
The same problem exsits in binary archive and text archive.
Is it a bug or a feature?  would it be fixed?