
On Aug 20, 2010, at 9:47 AM, Marshall Clow wrote:
On Aug 20, 2010, at 10:38 AM, Robert Ramey wrote:
Jeff Flinn wrote:
Building boost 1.44 on Mac OSX generating universal binaries fails to compile serialization lib, due to static asserts in basic_binary_?archive.hpp's at:
BOOST_STATIC_ASSERT(sizeof(tracking_type) == sizeof(char));
It appears that this fails for the ppc architecture.
Robert, Any ideas on fixing this?
Thanks, Jeff
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
I included these asserts to trap any future change in the size of these types. Accidently changing these sizes silently breaks previous archives which is a major pain.
boost/archive/tracking_type is actually a bool - which I had assumed would be a char in all machines. So I guess that correct way to express this would be:
BOOST_STATIC_ASSERT(sizeof(tracking_type) == sizeof(bool));
Try making this change and verify that it fixes the problem and I'll check in the change.
Tests done on my Mac running 10.6.4:
$ g++ --version i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)
$ cat junk.cpp #include <iostream>
int main ( int argc, char *argv[] ) { std::cout << "sizeof (bool) = " << sizeof (bool) << std::endl; return 0; }
$ g++ -arch i386 junk.cpp && ./a.out sizeof (bool) = 1
$ g++ -arch x86_64 junk.cpp && ./a.out sizeof (bool) = 1
$ g++ -arch ppc junk.cpp && ./a.out sizeof (bool) = 4
Better test (looks like Robert's change will work): $ cat junk.cpp #include <iostream> #include <boost/archive/basic_archive.hpp> int main ( int argc, char *argv[] ) { std::cout << "Sizeof (bool) = " << sizeof (bool) << std::endl; std::cout << "Sizeof (tracking_type) = " << sizeof (boost::archive::tracking_type) << std::endl; return 0; } $ g++ -I /Marshall/Sources/boost/boost_1_44_0 -arch ppc junk.cpp && ./a.out Sizeof (bool) = 4 Sizeof (tracking_type) = 4 $ g++ -I /Marshall/Sources/boost/boost_1_44_0 -arch i386 junk.cpp && ./a.out Sizeof (bool) = 1 Sizeof (tracking_type) = 1 $ g++ -I /Marshall/Sources/boost/boost_1_44_0 -arch x86_64 junk.cpp && ./a.out Sizeof (bool) = 1 Sizeof (tracking_type) = 1 -- Marshall