Serialization compile errors on CW9

I am trying to play with Serialization #18 on CodeWarrior 9, and I ran into the following problems: mbstate_t is not in the global namespace when using CW9 and MW STL (I didn't test with gcc STL). This caused compile errors in archive/codecvt_null.hpp. I altered the workaround already present for Borland, but I believe this is the wrong answer, because it puts a using declaration in a header file. Inside iterator_facade, I had to change: Derived const& derived() const { return static_cast<Derived const&>(*this); } to Derived const& derived() const { return *static_cast<Derived const*>(this); } Without that change, CW gives a warning saying that the function returns a reference to an automatic variable. I am pretty sure the warning is wrong, but this change silenced it, and I don't have the time to read over the spec to find out if the warning is correct or not. That leaves me with the following two errors in compiling text_oarchive.cpp... I am not sure what to do about these two errors, but I am too tired to stare at them right now, so I am posting them here in hope that someone can make sense out of them... the second error in particular makes no sense to me at all. meeroh Error : illegal explicit conversion from 'boost::iterator_facade<boost::archive::iterators::insert_linebreaks<boost::archi ve::iterators::base64_from_binary<boost::archive::iterators::transform_width<cons t char *, 6, 8, char>, char>, 72, char>, char, boost::single_pass_traversal_tag, char, char>' to 'const char *' (instantiating: 'boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char>>>::save_binary(const void *, unsigned long)') (instantiating: 'std::copy<boost::archive::iterators::insert_linebreaks<boost::archive::iterators ::base64_from_binary<boost::archive::iterators::transform_width<const char *, 6, 8, char>, char>, 72, char>, boost::archive::iterators::ostream_iterator<char>>(boost::archive::iterators::ins ert_linebreaks<boost::archive::iterators::base64_from_binary<boost::archive::iter ators::transform_width<const char *, 6, 8, char>, char>, 72, char>, boost::archive::iterators::insert_linebreaks<boost::archive::iterators::base64_fr om_binary<boost::archive::iterators::transform_width<const char *, 6, 8, char>, char>, 72, char>, boost::archive::iterators::ostream_iterator<char>)') (instantiating: 'boost::operator!=<boost::archive::iterators::insert_linebreaks<boost::archive::i terators::base64_from_binary<boost::archive::iterators::transform_width<const char *, 6, 8, char>, char>, 72, char>, char, boost::single_pass_traversal_tag, char, char, boost::archive::iterators::insert_linebreaks<boost::archive::iterators::base64_fr om_binary<boost::archive::iterators::transform_width<const char *, 6, 8, char>, char>, 72, char>, char, boost::single_pass_traversal_tag, char, char>(const boost::iterator_facade<boost::archive::iterators::insert_linebreaks<boost::archiv e::iterators::base64_from_binary<boost::archive::iterators::transform_width<const char *, 6, 8, char>, char>, 72, char>, char, boost::single_pass_traversal_tag, char, char> &, const boost::iterator_facade<boost::archive::iterators::insert_linebreaks<boost::archiv e::iterators::base64_from_binary<boost::archive::iterators::transform_width<const char *, 6, 8, char>, char>, 72, char>, char, boost::single_pass_traversal_tag, char, char> &)') (instantiating: 'boost::archive::iterators::insert_linebreaks<boost::archive::iterators::base64_f rom_binary<boost::archive::iterators::transform_width<const char *, 6, 8, char>, char>, 72, char>::insert_linebreaks<boost::iterator_facade<boost::archive::iterators::insert _linebreaks<boost::archive::iterators::base64_from_binary<boost::archive::iterato rs::transform_width<const char *, 6, 8, char>, char>, 72, char>, char, boost::single_pass_traversal_tag, char, char>>(boost::iterator_facade<boost::archive::iterators::insert_linebreaks<boost: :archive::iterators::base64_from_binary<boost::archive::iterators::transform_widt h<const char *, 6, 8, char>, char>, 72, char>, char, boost::single_pass_traversal_tag, char, char>)') (instantiating: 'boost::archive::iterators::base64_from_binary<boost::archive::iterators::transfo rm_width<const char *, 6, 8, char>, char>::base64_from_binary<boost::iterator_facade<boost::archive::iterators::inser t_linebreaks<boost::archive::iterators::base64_from_binary<boost::archive::iterat ors::transform_width<const char *, 6, 8, char>, char>, 72, char>, char, boost::single_pass_traversal_tag, char, char>>(boost::iterator_facade<boost::archive::iterators::insert_linebreaks<boost: :archive::iterators::base64_from_binary<boost::archive::iterators::transform_widt h<const char *, 6, 8, char>, char>, 72, char>, char, boost::single_pass_traversal_tag, char, char>)') (instantiating: 'boost::archive::iterators::transform_width<const char *, 6, 8, char>::transform_width<boost::iterator_facade<boost::archive::iterators::insert_l inebreaks<boost::archive::iterators::base64_from_binary<boost::archive::iterators ::transform_width<const char *, 6, 8, char>, char>, 72, char>, char, boost::single_pass_traversal_tag, char, char>>(boost::iterator_facade<boost::archive::iterators::insert_linebreaks<boost: :archive::iterators::base64_from_binary<boost::archive::iterators::transform_widt h<const char *, 6, 8, char>, char>, 72, char>, char, boost::single_pass_traversal_tag, char, char>)') transform_width.hpp line 105 super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start)))), Error : object 'boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::text_oarchive _impl `base constructor'(std::basic_ostream<char, std::char_traits<char>> &, unsigned int)' redefined (instantiating: 'boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::text_oarchive _impl `base constructor'(std::basic_ostream<char, std::char_traits<char>> &, unsigned int)') text_oarchive.hpp line 61 text_oarchive_impl(std::ostream & os, unsigned int flags = 0) : -- If this message helped you, consider buying an item from my wish list: <http://web.meeroh.org/wishlist>

Miro Jurisic wrote:
Inside iterator_facade, I had to change:
Derived const& derived() const { return static_cast<Derived const&>(*this); }
to Derived const& derived() const { return *static_cast<Derived const*>(this); }
Without that change, CW gives a warning saying that the function returns a reference to an automatic variable. I am pretty sure the warning is wrong, but this change silenced it, and I don't have the time to read over the spec to find out if the warning is correct or not.
This is a known bug in CodeWarrior: http://lists.boost.org/MailArchives/boost/msg57316.php It's a miscompilation bug, and in CW8 you don't even get a warning. I strongly suggest the code to be changed. Dave? -- Giovanni Bajo

"Giovanni Bajo" <giovannibajo@libero.it> writes:
This is a known bug in CodeWarrior: http://lists.boost.org/MailArchives/boost/msg57316.php
It's a miscompilation bug, and in CW8 you don't even get a warning. I strongly suggest the code to be changed. Dave?
Done. -- Dave Abrahams Boost Consulting http://www.boost-consulting.com
participants (3)
-
David Abrahams
-
Giovanni Bajo
-
Miro Jurisic