mirror of
				https://github.com/boostorg/optional.git
				synced 2025-11-04 01:31:57 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			886 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			886 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
[section IO operators]
 | 
						|
 | 
						|
It is possible to use `optional<T>` with IO streams, provided that `T` can be used with streams. IOStream operators are defined in a separate header.
 | 
						|
 | 
						|
``
 | 
						|
#include <iostream>
 | 
						|
#include <boost/optional/optional_io.hpp>
 | 
						|
 | 
						|
int main()
 | 
						|
{
 | 
						|
  boost::optional<int> o1 = 1, oN = boost::none;
 | 
						|
  std::cout << o1;
 | 
						|
  std::cin >> oN;
 | 
						|
}
 | 
						|
``
 | 
						|
 | 
						|
The current implementation does not guarantee any particular output. What it guarantees is that if streaming out and then back in `T` gives the same value, then streaming out and then back in `optional<T>` will also give back the same result:
 | 
						|
 | 
						|
``
 | 
						|
#include <cassert>
 | 
						|
#include <sstream>
 | 
						|
#include <boost/optional/optional_io.hpp>
 | 
						|
 | 
						|
int main()
 | 
						|
{
 | 
						|
  boost::optional<int> o1 = 1, oN = boost::none;
 | 
						|
  boost::optional<int> x1, x2;
 | 
						|
  std::stringstream s;
 | 
						|
  s << o1 << oN;
 | 
						|
  s >> x1 >> x2;
 | 
						|
  assert (o1 == x1);
 | 
						|
  assert (oN == x2);
 | 
						|
}
 | 
						|
``
 | 
						|
 | 
						|
[endsect]
 |