[iostreams] problems with operator<<

Hello, I'm using the container_device class provided in the documentation. I'm creating my stream and device like so: typedef boost::iostreams::stream< container_device<std::vector<boost::uint8_t > >
ByteStream;
ByteStream stream; stream << "Hello"; This compiles fine, however when I run this code I get an assertion deep inside of the << operator, which is in the std namespace. I thought that boost::iostreams would have its own global << and >> operators? I was expecting the << operator to directly call my device's write() method, but it doesn't. Perhaps I just don't understand how this works. I'm trying to write out binary data. The string should translate to a series of bytes in the container. The assertion I'm hitting is in optional.hpp in Boost. I'm using MSVC9 as my compiler: T& operator*() { assert(initialized_); return *static_cast<T*>(address()); } Above contains the code snippet where the assertion is happening. I have no idea what this assert means. Below is my callstack:
VFDTester.exe!boost::iostreams::detail::optional<boost::iostreams::detail::concept_adapter<container_device<std::vector<unsigned char,std::allocator<unsigned char> > > > >::operator*() Line 55 + 0x1f bytes C++ VFDTester.exe!boost::iostreams::detail::indirect_streambuf<container_device<std::vector<unsigned char,std::allocator<unsigned char> > >,std::char_traits<unsigned char>,std::allocator<unsigned char>,boost::iostreams::seekable>::obj() Line 104 + 0x19 bytes C++ VFDTester.exe!boost::iostreams::detail::indirect_streambuf<container_device<std::vector<unsigned char,std::allocator<unsigned char> > >,std::char_traits<unsigned char>,std::allocator<unsigned char>,boost::iostreams::seekable>::overflow(long c=72) Line 301 + 0x15 bytes C++ VFDTester.exe!std::basic_streambuf<unsigned char,std::char_traits<unsigned char> >::sputc(unsigned char _Ch='H') Line 163 + 0x4c bytes C++ VFDTester.exe!std::operator<<<unsigned char,std::char_traits<unsigned char> >(std::basic_ostream<unsigned char,std::char_traits<unsigned char> > & _Ostr={...}, const char * _Val=0x0074a7b0) Line 679 + 0x32 bytes C++ VFDTester.exe!MainFrame::OnConnectPressed(wxCommandEvent & event={...}) Line 82 + 0x36 bytes C++
--------- Robert Dailey

Robert Dailey wrote:
Hello,
I'm using the container_device class provided in the documentation. I'm creating my stream and device like so:
typedef boost::iostreams::stream< container_device<std::vector<boost::uint8_t > >
ByteStream;
ByteStream stream; stream << "Hello";
Hi, I did the same and it runs just fine... I modified the example from iostreams documentation to make it compile (this probably answers your previous mail, could you file a patch after verifying my changes?). A complete example which compiles (and runs just fine with boost 1.36) is attached. So in order to find out what's wrong in your case, you should provide a full example yourself. Regards, Roland
participants (2)
-
Robert Dailey
-
Roland Bock