/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman 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 PHOENIX_OPERATOR_DETAIL_IO_HPP #define PHOENIX_OPERATOR_DETAIL_IO_HPP #include #include #include #include #include namespace boost { namespace phoenix { namespace detail { typedef char(&no)[1]; typedef char(&yes)[2]; template yes ostream_test(std::basic_ostream*); no ostream_test(...); template yes istream_test(std::basic_istream*); no istream_test(...); template struct is_ostream { static T x; BOOST_STATIC_CONSTANT(bool, value = sizeof(detail::ostream_test(boost::addressof(x))) == sizeof(yes)); }; template struct is_istream { static T x; BOOST_STATIC_CONSTANT(bool, value = sizeof(detail::istream_test(boost::addressof(x))) == sizeof(yes)); }; template struct enable_if_ostream : enable_if< detail::is_ostream , actor< typename as_composite< shift_left_eval , actor > , actor >::type > > {}; template struct enable_if_istream : enable_if< detail::is_istream , actor< typename as_composite< shift_right_eval , actor > , actor >::type > > {}; typedef std::ios_base& (*iomanip_type)(std::ios_base&); typedef std::istream& (*imanip_type)(std::istream&); typedef std::ostream& (*omanip_type)(std::ostream&); }}} #endif