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]
|