Boost logo

Boost Users :

From: François Duranleau (duranlef_at_[hidden])
Date: 2006-05-25 13:04:21


I came up with a I/O weird behaviour with boost::tuple. In the following
example program:

#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_io.hpp>
#include <iostream>
#include <sstream>

     using namespace std ;
     using namespace boost ;

     typedef ::boost::tuple< float > tuple_type ;
     float v ;
     tuple_type t ;

     string str = "0.1" ;
     istringstream str_in( str ) ;

     str_in >> v ;
     if ( str_in >> t )
         cout << "yes " ;
         cout << "no " ;
     cout << t << endl ;

     return 0 ;

I expect the output to be "no (0)", but I get "yes (0)". Usually, I expect
operator>> with streams to change the state of the stream to some kind of
failure state if it could not read the requested type. For example if I
replace the 'if' with the following:

if ( str_in >> t.get< 0 >() )

then I get "no (0)". Although I know it is not the equivalent to reading
the tuple t directly (no open/close character), at least I get the error
set I as expected. If the end of input (eof) as been read before reading
the tuple, then the condition will be false.

So, I am wrong to expect such a behavior? Or is there a bug here (either
in the way I use it or in the tuple's input operator)?

If it matters, the compiler used is g++ 4.0.


François Duranleau
LIGUM, Université de Montréal
"Do you want to use a machine, or do you want the machine to use you?"
                                                - Doohan, in _Cowboy Bebop_

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at