/*============================================================================= Copyright (c) 2011-2016 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout Distributed under 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) =============================================================================*/ #ifndef SPROUT_UTILITY_VALUE_HOLDER_IO_HPP #define SPROUT_UTILITY_VALUE_HOLDER_IO_HPP #include #include #include #include #include namespace sprout { // // operator>> // template inline SPROUT_NON_CONSTEXPR typename std::enable_if< !std::is_reference::value, std::basic_istream& >::type operator>>(std::basic_istream& lhs, sprout::value_holder& rhs) { if (lhs.good()) { int d = lhs.get(); if (d == ' ') { T x; lhs >> x; rhs = x; } else { lhs.setstate(std::ios::failbit); } } return lhs; } // // operator<< // template inline SPROUT_NON_CONSTEXPR std::basic_ostream& operator<<(std::basic_ostream& lhs, sprout::value_holder const& rhs) { if (lhs.good()) { if (!rhs) { lhs << "--"; } else { lhs << ' ' << *rhs; } } return lhs; } } // namespace sprout #endif // #ifndef SPROUT_UTILITY_VALUE_HOLDER_IO_HPP