|
Boost Users : |
From: Niklas Wiberg (nwlists-boostusers_at_[hidden])
Date: 2005-10-10 09:24:25
Hi,
I'm using boost 1.33.0 on windows (VC++6).
I would like to use a code_converter to convert internal std::wstring's
(which I understand are ucs2 in windows/vstudio, but that shouldn't
matter here I guess) to utf-8 when saving to file.
Here is the failing code:
<code>
void main()
{
typedef
boost::iostreams::code_converter<boost::iostreams::file_sink,
WideCharToUtf8Cvt> my_sink;
std::wstring teststr(L"Blah blah.");
boost::iostreams::filtering_wostream out;
boost::iostreams::file_sink myFile("out.txt");
out.push(my_sink(myFile));
out << teststr;
}
</code>
WideCharToUtf8Cvt is my own codecvt implementation.
The problem is that I get a crash as the stream is being destroyed.
The call stack is too deep to include here, but one of the last things are:
policy_type& dev() { return **dev_; }
in boost.iostreams.detail.code_converter_impl
which calls
boost::iostreams::detail::optional<boost::iostreams::detail::concept_adapter<boost::iostreams::basic_file_sink<char>
> >::operator*()
operator*() asserts on initialized_ which is false in this case.
I've tried both with vc++6 sp5 and vc++ 7.1 with the same results.
Also, there is no difference if I use this typedef for my_sink:
typedef boost::iostreams::code_converter<boost::iostreams::file_sink>
my_sink;
so I don't think my codecvt implementation is to blame...
The file out.txt actually gets filled with the expected data.
Am I going about this the completely wrong way or am I just missing some
important detail?
Any help would be greatly appreciated,
Niklas Wiberg
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net