|
Boost Users : |
From: Drumheller, Michael (michael.drumheller_at_[hidden])
Date: 2006-04-03 04:21:44
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_at_[hidden]
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