Boost logo

Boost Users :

Subject: Re: [Boost-users] [serialization] text_oarchive problem
From: Greg (grisharav_at_[hidden])
Date: 2009-02-13 11:53:57


Hey, thanks for the reply.
The problem is that the code doen't compile, not about runtime.

However, I have identified the problem - the code below doesn't compile with /Za (With laguage extensions disbaled)
The code traps in boost\archive\detail\oserializer.hpp line 538:

  template<class Archive, class T>
  inline void save(Archive & ar, T &t){

  // if your program traps here, it indicates that your doing one of the following:
  // a) serializing an object of a type marked "track_never" through a pointer.
  // b) saving an non-const object of a type not markd "track_never)
  // Either of these conditions may be an indicator of an error usage of the
  // serialization library and should be double checked. See documentation on
  // object tracking. Also, see the "rationale" section of the documenation
  // for motivation for this checking.

  BOOST_STATIC_WARNING(check_tracking<T>::value);
  save(ar, const_cast<const T &>(t));

  }

When compiling with language extensions enabled the code compiles fine.
This remains a question, why does this code require non standard extension?

This might an issue for a developer that wants to write more or less portable code.
Suggestion anyone?
Greg

  "Robert Ramey" <ramey_at_[hidden]> wrote in message news:gn0h34$9ae$1_at_ger.gmane.org...
  It might be help to indicate the error and which line tripped it.

  In the meantime

  a) binary streams should be opened with ios::binary
  b) I don't remember what std::cout is derived from. Try stringstream or fstream

  Robert Ramey
    "Greg Ravikovich" <grisharav_at_[hidden]> wrote in message news:442cf10a0902110433h2aa8ef69k71cc660c8e7e492b_at_mail.gmail.com...
    Hello all,
    I'm using boost 1.37 on msvc 9.
    I have a compilation problem when serializing to a text_oarchive.
    The problem doesn't happen when serializing to a binary_oarchive. here's a sample code:

    #include <boost/test/unit_test.hpp>

    #include <boost/serialization/serialization.hpp>
    #include <boost/archive/text_oarchive.hpp>
    #include <boost/archive/binary_oarchive.hpp>
    #include <boost/serialization/tracking.hpp>

    struct SerializableStruct
    {
       int m_data;
    };

    namespace boost
    {
       namespace serialization
       {
          template<class Archive>
          void serialize(Archive & ar, SerializableStruct & s, unsigned int )
          {
             ar & s.m_data;
          }
       }
    }

    BOOST_CLASS_TRACKING(SerializableStruct,boost::serialization::track_never);

    BOOST_AUTO_TEST_SUITE(TestGeneralSerialize)

    BOOST_AUTO_TEST_CASE(TestTextArchive)
    {
       boost::archive::text_oarchive out(std::cout);
       SerializableStruct s;
       s.m_data = 10;
       out << s;
    }

    BOOST_AUTO_TEST_CASE(TestBinaryArchive)
    {
       std::stringstream str;
       boost::archive::binary_oarchive out(str);
       SerializableStruct s;
       s.m_data = 10;
       out << s;
    }

    BOOST_AUTO_TEST_SUITE_END();

    By the way,
    the following code compiles fine under boost 1.35 and fails to compile under boost 1.36, 1.37.
    Comment out the TestTextArchive and the code compiles fine.
    Any help will be appreciated.

    Greg

----------------------------------------------------------------------------

    _______________________________________________
    Boost-users mailing list
    Boost-users_at_[hidden]
    http://lists.boost.org/mailman/listinfo.cgi/boost-users

------------------------------------------------------------------------------

  _______________________________________________
  Boost-users mailing list
  Boost-users_at_[hidden]
  http://lists.boost.org/mailman/listinfo.cgi/boost-users



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