Boost logo

Boost :

From: Robert Ramey (ramey_at_[hidden])
Date: 2004-05-08 13:06:21


 Fredrik Blomqvist wrote:

> The switch-case in class archive_exception lacks a 'break' after the
> 'stream> error' case which leads to incorrect what() message.

OK

> I also note that the error code "invalid_class_name" doesn't have a
> message
> equivalent.

OK

> Furthermore I'm confused about this (which was the reason I found the
> other
> bug) :
> (VC7.1 + Dinkumware)
>
> int main()
> {
> try
> {
> // save
> {
> std::ofstream ofs("serializer_test.txt");
> boost::archive::text_oarchive oa(ofs);
>
> oa << 'x';
> // ofs.close(); // uncommenting this throws "stream_error"
> (altough
> currently with wrong what() message)
> oa << 'y';
> }
>
> // load
> {
> std::ifstream ifs("serializer_test.txt", std::ios::binary);
> boost::archive::text_iarchive ia(ifs);
>
> char x, y;
> ia >> x;
> // ifs.close(); // uncommenting this _doesn't_ throw?
> ia >> y;
>
> assert(x == 'x' && y == 'y');
> }
> }
> catch(std::exception const& e)
> {
> std::cout << e.what();
> }
>
> return 0;
> }
>
>
> Shouldn't reading throw also? The archives check is/os.good() to throw.
> Or is this a bug in my std.lib (or my understanding of it? ;)
>

#1 looks correct to me. An attempt to read a closed stream should be an
error.

#2 looks to me like it should throw as well. One think, I'm checking
os.good BEFORE trying to write. I don't check it afterwards. Maybe that's
the issue. The reason I did this is that after reading eof - os.good()
returns false - not really what we want. But at the point where we can
check, we don't know that there isn't anything more to be read.

Robert Ramey


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk