I've got a system where

class A
{
  A();
  A(const string&);
  virtual ~A();
};

class C : public A
{
    C();
    C(const A&, float);
    virtual ~C();
};

BOOST_CLASS_EXPORT( A )
BOOST_CLASS_EXPORT( C )


main()
{
...
const A* a = new a("stuff");
const C* c = new c(*a, 52.54390f);
{
    ofstream ofs("dump.bin");
    boost::archive::text_oarchive oa(ofs);
    oa<<a<<c;
}

...


A* a2=NULL;
C* c2=NULL;
try
{
        ifstream ifs("dump.bin");
        boost::archive::text_iarchive ia(ifs);
        ia>>a2;
        ia>>c2;

}
catch(boost::archive::archive_exception& ae)
{
        cout<<ae.what();
}

}


This works just fine. If I replace
A* a2=NULL;
C* c2=NULL;

with
A* a2=NULL;
A* c2=NULL;


Then it throws an unregistered_class exception. If I change the iarchive to take:

const A* a = new A("I'm cool");
const A* c = new C(*a,54.2f);

then I can unarchive it with a pair of A*.


Is this by design? Seriously? I can't save derived pointers and unarchive base pointers?


Larry