Ticket #4728: boost_iostreams-mode_adaptor-flushable.patch

File boost_iostreams-mode_adaptor-flushable.patch, 1.7 KB (added by Duncan Exon Smith <duncanphilipnorman@…>, 12 years ago)

Patch to fix boost::iostreams::detail::mode_adapter<> to be flushable when appropriate.

  • boost/iostreams/detail/adapter/mode_adapter.hpp

     
    2323#include <boost/iostreams/traits.hpp>
    2424#include <boost/iostreams/operations.hpp>
    2525#include <boost/mpl/if.hpp>
     26#include <boost/type_traits/is_convertible.hpp>
    2627
    2728namespace boost { namespace iostreams { namespace detail {
    2829
     
    3839          device_tag,
    3940          mpl::if_<is_filter<T>, filter_tag, device_tag>,
    4041          mpl::if_<is_filter<T>, multichar_tag, empty_base>,
     42          mpl::if_<
     43              mpl::or_<
     44                  is_convertible<BOOST_DEDUCED_TYPENAME category_of<T>::type, ostream_tag>,
     45                  is_convertible<BOOST_DEDUCED_TYPENAME category_of<T>::type, streambuf_tag>,
     46                  is_convertible<BOOST_DEDUCED_TYPENAME category_of<T>::type, flushable_tag>
     47              >,
     48              flushable_tag,
     49              empty_base
     50          >::type,
    4151          #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
    4252              closable_tag, // VC6 can't see member close()!
    4353          #endif
     
    6777    std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
    6878    { return iostreams::write(t_, snk, s, n); }
    6979
     80    bool flush()
     81    { return iostreams::flush(t_); }
     82
     83    template<typename Sink>
     84    bool flush(Sink& snk)
     85    { return iostreams::flush(t_, snk); }
     86
    7087    template<typename Device>
    7188    std::streampos seek(Device& dev, stream_offset off, BOOST_IOS::seekdir way)
    7289    { return iostreams::seek(t_, dev, off, way); }