Re: [Boost-users] Serialization--a peculiar observation regardingoperator<<

boost-users-bounces@lists.boost.org wrote:
The test program below (under boost 1_33, vc71) compiles fine, unless I change the "#if 1" to "#if 0", in which case it produces this: error C2679: binary '<<': no operator found which takes a right-hand operand of type 'double' (or there is no acceptable conversion)
Can anyone explain why that should happen? A double is a double--why should '<<' care whether the rhs comes from funcall a variable?
Note: The test program is clearly a nonsense program (in real life the role of foo() is played by some public (get-accessor) on klass--a very common pattern when doing a non-intrusive serialization). But I did not want to cloud the issue--I wanted to emphasize that the bug, if it is a bug, seems to have nothing to with klass.
Thank you.
Michael Drumheller
-----------------------------------------------------------------begin--
------------------------------------------------------------- #include <fstream> #include
#include class klass {}; double foo() { return 3.1416; } namespace boost { namespace serialization { template<class Archive> void save(Archive &ar, const klass & b, const unsigned int ver) { #if 1 double x=foo(); ar << x; #else ar << foo(); #endif } template<class Archive> void load(Archive &ar, klass & b, const unsigned int ver){}//N/A for this demo }} BOOST_SERIALIZATION_SPLIT_FREE(klass); void out(const char *testfile, const klass & c) { std::ofstream ofs(testfile); boost::archive::text_oarchive oa(ofs); oa << c; }
----------------------------------------------------------------end-----
----------------------------------------------------------------- Michael Drumheller Boeing Phantom Works Mathematics and Engineering Analysis 425.865.3520 michael.drumheller@boeing.com
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
hi michael, try changing: double foo() { return 3.1416; } to const double foo() { return 3.1416; } HTH dave
participants (1)
-
David Klein