diff --git a/include/boost/iostreams/detail/adapter/mode_adapter.hpp b/include/boost/iostreams/detail/adapter/mode_adapter.hpp index 9f4330d..b00d303 100755 --- a/include/boost/iostreams/detail/adapter/mode_adapter.hpp +++ b/include/boost/iostreams/detail/adapter/mode_adapter.hpp @@ -24,12 +24,13 @@ namespace boost { namespace iostreams { namespace detail { -template +template class mode_adapter { private: struct empty_base { }; public: - typedef BOOST_IOSTREAMS_CHAR_TYPE(T) char_type; + typedef typename wrapped_type::type policy_type; + typedef BOOST_IOSTREAMS_CHAR_TYPE(T) char_type; struct io_category : Mode, device_tag, @@ -38,7 +39,7 @@ public: closable_tag, localizable_tag { }; - mode_adapter(T t) : t_(t) { } + mode_adapter(const policy_type& t) : t_(t) { } // Device member functions. @@ -80,26 +81,26 @@ public: void imbue(const Locale& loc) { return iostreams::imbue(t_, loc); } private: - T t_; + policy_type t_; }; //------------------Implementation of mode_adapter----------------------------// -template -std::streamsize mode_adapter::read(char_type* s, std::streamsize n) +template +std::streamsize mode_adapter::read(char_type* s, std::streamsize n) { return boost::iostreams::read(t_, s, n); } -template -void mode_adapter::write(const char_type* s, std::streamsize n) +template +void mode_adapter::write(const char_type* s, std::streamsize n) { boost::iostreams::write(t_, s, n); } -template -std::streamoff mode_adapter::seek +template +std::streamoff mode_adapter::seek (std::streamoff off, std::ios::seekdir way, std::ios::openmode which) { return boost::iostreams::seek(t_, off, way, which); } -template -void mode_adapter::close(std::ios::openmode which) +template +void mode_adapter::close(std::ios::openmode which) { iostreams::close(t_, which); } } } } // End namespaces detail, iostreams, boost.