Robert Ramey wrote
>> The only reason to export a type is if one needs to
>> serialize it through a base class pointer.  So, to me
>> the best way to suppress the warning would be
>> to not export the type.

The warning message appears even if you don't export
the type: Here is a simple test case 
 //==================================
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/shared_ptr.hpp>     // no need to include shared_ptr
#include <boost/serialization/export.hpp>

class Concrete {
public:
   Concrete(const std::string& name ) : name_(name) {}
   Concrete() {}
private:
    std::string name_;
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive& ar,const unsigned int){
        ar & name_;
    }
};

class Base {
public:
   Base(const std::string& name ) : name_(name) {}
   Base() {}
   virtual ~Base(){}
private:
    std::string name_;
    std::vector<boost::shared_ptr<Concrete> >  vec_;

    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int) {
        ar & name_;
        ar & vec_;
     }
};

class Derived : public Base {
public:
   Derived(const std::string& name ) : Base(name) {}
   Derived() {}
private:
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int) {
        ar & boost::serialization::base_object<Base>(*this);
    }
};

BOOST_CLASS_EXPORT(Derived);
 //==================================

Notice that I have not exported Concrete, but the
serialisation will spit out a warning message, about
class Concrete.

... boost_1_39_0/boost/serialization/extended_type_info_typeid.hpp", line 88:
warning #2414-D: delete of pointer to incomplete class
          BOOST_STATIC_WARNING(boost::is_polymorphic<T>::value);
          ^detected during:
            instantiation of "const boost::serialization::extended_type_info *boost::serialization::extended_type_info_typeid<T>::get_derived_extended_type_info(const T &) const [with T=Concrete]" at line 92 of "/scratch/ma/emos/ma0/hpia64/boost/boost_1_39_0/boost/archive/shared_ptr_helper.hpp"


It looks like if we are serialising via a base ptr, and the
base class is serialising concrete data member  via a shared ptr,
it has assumed that the type must be polymorphic.  This does
not seem right to me ?

  Best regards,
Ta,
   Avi