
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 <boost/archive/text_oarchive.hpp> #include <boost/serialization/split_free.hpp> 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