diff --git a/include/boost/archive/iterators/mb_from_wchar.hpp b/include/boost/archive/iterators/mb_from_wchar.hpp index 52979565..d5110de2 100644 --- a/include/boost/archive/iterators/mb_from_wchar.hpp +++ b/include/boost/archive/iterators/mb_from_wchar.hpp @@ -116,6 +116,7 @@ public: template mb_from_wchar(T start) : super_t(Base(static_cast< T >(start))), + m_mbs(std::mbstate_t()), m_bend(0), m_bnext(0), m_full(false) diff --git a/include/boost/archive/iterators/wchar_from_mb.hpp b/include/boost/archive/iterators/wchar_from_mb.hpp index 029e96be..dbeb8f69 100644 --- a/include/boost/archive/iterators/wchar_from_mb.hpp +++ b/include/boost/archive/iterators/wchar_from_mb.hpp @@ -124,8 +124,10 @@ public: // make composible buy using templated constructor template wchar_from_mb(T start) : - super_t(Base(static_cast< T >(start))) + super_t(Base(static_cast< T >(start))), + m_mbs(std::mbstate_t()) { + BOOST_ASSERT(std::mbsinit(&m_mbs)); drain(); } // copy ctor diff --git a/test/test_iterators.cpp b/test/test_iterators.cpp index a45a3e6c..ad63eb37 100644 --- a/test/test_iterators.cpp +++ b/test/test_iterators.cpp @@ -66,7 +66,6 @@ void test_mb_from_wchar(const char * a, const wchar_t *la, const unsigned int si void test_roundtrip(const wchar_t * la){ std::size_t s = std::wcslen(la); std::vector a; - std::vector la2; { typedef boost::archive::iterators::mb_from_wchar translator; std::copy( @@ -74,8 +73,10 @@ void test_roundtrip(const wchar_t * la){ translator(la + s), std::back_inserter(a) ); + a.push_back((char)0); } BOOST_CHECK(a.size() > 0); + std::vector la2; { typedef boost::archive::iterators::wchar_from_mb::const_iterator> translator; std::copy( @@ -83,8 +84,9 @@ void test_roundtrip(const wchar_t * la){ translator(a.end()), std::back_inserter(la2) ); + la2.push_back((wchar_t)0); } - BOOST_CHECK(la2.size() == s); + BOOST_CHECK(la2.size() == s + 1); BOOST_CHECK(std::equal(la, la + s, la2.begin())); } #endif @@ -253,5 +255,3 @@ test_main(int /* argc */, char* /* argv */ [] ) return EXIT_SUCCESS; } - -