/usr/include/boost/optional
Edit: /usr/include/boost/optional/optional_io.hpp (1768B)
// Copyright (C) 2005, Fernando Luis Cacciola Carballal.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/optional for documentation.
//
// You are welcome to contact the author at:
// fernando_cacciola@hotmail.com
//
#ifndef BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
#define BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
#include
#include
#include "boost/none.hpp"
#include "boost/optional/optional.hpp"
namespace boost
{
template
inline
std::basic_ostream&
operator<<(std::basic_ostream& out, none_t)
{
if (out.good())
{
out << "--";
}
return out;
}
template
inline
std::basic_ostream&
operator<<(std::basic_ostream& out, optional const& v)
{
if (out.good())
{
if (!v)
out << "--" ;
else out << ' ' << *v ;
}
return out;
}
template
inline
std::basic_istream&
operator>>(std::basic_istream& in, optional& v)
{
if (in.good())
{
int d = in.get();
if (d == ' ')
{
T x;
in >> x;
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
v = boost::move(x);
#else
v = x;
#endif
}
else
{
if (d == '-')
{
d = in.get();
if (d == '-')
{
v = none;
return in;
}
}
in.setstate( std::ios::failbit );
}
}
return in;
}
} // namespace boost
#endif