Robert Ramey wrote:
This is explainined in the section - "rationale" in the documentation. The following changes would make it work;
int _tmain(int argc, _TCHAR* argv[]) { Table aTable;
{ const Table & stable = aTable;
ofstream ofs( "Settings.txt" ); boost::archive::text_oarchive oa( ofs ); oa << sTable;
Robert, This issues seems to pop up again and again. It's just *so* surprising (nobody reads through all the docs of a library when they start to use it). As you remember, I had to contact you personally to help me with Pointer Container Serialization --- it was not because I hadn't tried before contacting you (I spent hours trying to figure out what was wrong). (I have documented a seperate todo-list for people using Boost.Pointer Container and serialization just to remember them of this isssue!). There has to be a better way. I read through your scenario again: http://www.boost.org/libs/serialization/doc/rationale.html#trap and I don't get very much of it. I understand the need for ensuring 1. no invalid archives are created. 2. no data is lost. 3. no runtime errors occur. but there has to be a better way, even if it means 3 becomes a runtime exception. Somehow the information of a class and how it is serialized must be localized ***in one place only*** so one programmer can't ruin the archieve of another programmer without his knowlegde. If this means 1. that by default, you can't serialize a pointer (you must ask for it), or 2. that by default, you have to define BOOST_SERIALIZATION_TRACKING that's ok. But something has to be done. -Thorsten BTW: I'm ok with T * t; ar >> t; failing (just make it part of the toturial). That's completely different from reading from an object.