Можно использовать<optional<T>>с потоками ввода-вывода при условии, что<T>можно использовать с потоками. Операторы IOStream определяются отдельным заголовком.
#include <iostream>
#include <boost/optional/optional_io.hpp>
int main()
{
boost::optional<int> o1 = 1, oN = boost::none;
std::cout << o1;
std::cin >> oN;
}
Нынешняя реализация не гарантирует какого-либо конкретного результата. Это гарантирует, что если потоковая передача, а затем обратно в<T>дает то же самое значение, то потоковая передача, а затем обратно в<optional<T>>также даст тот же результат:
#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);
}