Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

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);
}


PrevUpHomeNext