Boost logo

Boost Users :

Subject: [Boost-users] [Serialization] Strange giant warning
From: David (evildavo_at_[hidden])
Date: 2010-03-08 08:53:12


For a short while now I've been using boost serialization.
It works perfectly... except... it keeps coming up one massive warning (that takes up ~100 lines). (see below)
Whenever I get annoyed, I try to experiment and then search for answers online, but no luck.
I'm probably using the library incorrectly somewhere.
So I made a small program that generates the problem.
Any advice on what I could be doing wrong would be appreciated.
I use vc++ 2008 btw.
Thanks.

Code:
--------------------------------------------
/* demonstration of problem.

The program asks the user for a number, and then saves this
number to a file. When the user returns, the number is remembered.
*/
#include <iostream>
#include <fstream>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

// save and load methods
void save (const char * fname);
bool load (const char * fname); // returns if successful

// I know this is way too simple to put in a class, but bare with me
class Game
{
public:
    Game () { number = 0; }

    void getNumberFromUser () { std::cin >> number; }
    int getNumber () { return number; }

private:
    int number;

    friend class boost::serialization::access;
    template<class Archive> void serialize(Archive & ar, const unsigned int version)
    {
        ar & number;
    }
};
typedef boost::shared_ptr< Game > Game_ptr;
Game_ptr game;

// entry
int main ()
{
    game = Game_ptr( new Game );

    // welcome
    std::cout << "Hello\n";

    // if file exists, recall the number
    if (load ("save.txt")) std::cout << "You're number is " << game->getNumber() << ".\n";

    // ask user for number
    std::cout << "Enter a number: \n";
    game->getNumberFromUser ();

    // memorise number
    save ("save.txt");

    // exit
    return 0;
}

void save (const char * fname)
{
    std::ofstream ofs( fname );
    boost::archive::text_oarchive oa( ofs );

    // save
    oa << game;
}

bool load (const char * fname)
{
    std::ifstream ifs( fname );
    if (!ifs) return false; // file doesn't already exist
    boost::archive::text_iarchive ia( ifs );

    // load
    ia >> game; // <------ Removing this line makes the warning go away
    return true;
}

Warning:
--------------------------------------------
1>main.cpp
1>d:\dev\boostpro\boost\boost_1_40\boost\serialization\extended_type_info_typeid.hpp(88) : warning C4099: 'boost::serialization::static_warning_impl<false>::STATIC_WARNING' : type name first seen using 'struct' now seen using 'class'
1> d:\dev\boostpro\boost\boost_1_40\boost\serialization\static_warning.hpp(115) : see declaration of 'boost::serialization::static_warning_impl<false>::STATIC_WARNING'
1> d:\dev\boostpro\boost\boost_1_40\boost\serialization\extended_type_info_typeid.hpp(85) : while compiling class template member function 'const boost::serialization::extended_type_info *boost::serialization::extended_type_info_typeid<T>::get_derived_extended_type_info(const T &) const'
1> with
1> [
1> T=Game
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\archive\shared_ptr_helper.hpp(105) : see reference to class template instantiation 'boost::serialization::extended_type_info_typeid<T>' being compiled
1> with
1> [
1> T=Game
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\serialization\shared_ptr.hpp(138) : see reference to function template instantiation 'void boost::archive::detail::shared_ptr_helper::reset<Game>(boost::shared_ptr<T> &,T *)' being compiled
1> with
1> [
1> T=Game
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\serialization\split_free.hpp(58) : see reference to function template instantiation 'void boost::serialization::load<Archive,Game>(Archive &,boost::shared_ptr<T> &,const unsigned int)' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\serialization\split_free.hpp(54) : while compiling class template member function 'void boost::serialization::free_loader<Archive,T>::invoke(Archive &,T &,const unsigned int)'
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=boost::shared_ptr<Game>
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\serialization\split_free.hpp(74) : see reference to class template instantiation 'boost::serialization::free_loader<Archive,T>' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=boost::shared_ptr<Game>
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\serialization\shared_ptr.hpp(153) : see reference to function template instantiation 'void boost::serialization::split_free<Archive,boost::shared_ptr<T>>(Archive &,boost::shared_ptr<T> &,const unsigned int)' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\serialization\serialization.hpp(133) : see reference to function template instantiation 'void boost::serialization::serialize<Archive,Game>(Archive &,boost::shared_ptr<T> &,const unsigned int)' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\archive\detail\iserializer.hpp(174) : see reference to function template instantiation 'void boost::serialization::serialize_adl<Archive,T>(Archive &,T &,const unsigned int)' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game_ptr
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\archive\detail\iserializer.hpp(161) : while compiling class template member function 'void boost::archive::detail::iserializer<Archive,T>::load_object_data(boost::archive::detail::basic_iarchive &,void *,const unsigned int) const'
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game_ptr
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\archive\detail\iserializer.hpp(362) : see reference to class template instantiation 'boost::archive::detail::iserializer<Archive,T>' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game_ptr
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\archive\detail\iserializer.hpp(351) : while compiling class template member function 'void boost::archive::detail::load_non_pointer_type<Archive,T>::load_standard::invoke(Archive &,T &)'
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game_ptr
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\archive\detail\iserializer.hpp(417) : see reference to class template instantiation 'boost::archive::detail::load_non_pointer_type<Archive,T>::load_standard' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game_ptr
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\archive\detail\iserializer.hpp(405) : while compiling class template member function 'void boost::archive::detail::load_non_pointer_type<Archive,T>::invoke(Archive &,T &)'
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game_ptr
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\archive\detail\iserializer.hpp(542) : see reference to class template instantiation 'boost::archive::detail::load_non_pointer_type<Archive,T>' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game_ptr
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\archive\detail\common_iarchive.hpp(61) : see reference to function template instantiation 'void boost::archive::load<Archive,T>(Archive &,T &)' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game_ptr
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\archive\basic_text_iarchive.hpp(62) : see reference to function template instantiation 'void boost::archive::detail::common_iarchive<Archive>::load_override<T>(T &,int)' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game_ptr
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\archive\text_iarchive.hpp(66) : see reference to function template instantiation 'void boost::archive::basic_text_iarchive<Archive>::load_override<T>(T &,int)' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game_ptr
1> ]
1> d:\dev\boostpro\boost\boost_1_40\boost\archive\detail\interface_iarchive.hpp(61) : see reference to function template instantiation 'void boost::archive::text_iarchive_impl<Archive>::load_override<T>(T &,int)' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game_ptr
1> ]
1> d:\dev\visual studio 2008\projects\boostserialisation\boostserialisation\main.cpp(82) : see reference to function template instantiation 'Archive &boost::archive::detail::interface_iarchive<Archive>::operator >><Game_ptr>(T &)' being compiled
1> with
1> [
1> Archive=boost::archive::text_iarchive,
1> T=Game_ptr
1> ]



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