Subject: [Boost-bugs] [Boost C++ Libraries] #2180: Errors on binary serialization of vector
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2008-08-10 06:36:48
#2180: Errors on binary serialization of vector
---------------------------------------+------------------------------------
Reporter: k_karanikolas_at_[hidden] | Owner: ramey
Type: Bugs | Status: new
Milestone: To Be Determined | Component: serialization
Version: Boost 1.35.0 | Severity: Problem
Keywords: |
---------------------------------------+------------------------------------
I am encountering compiler errors when trying to serialize objects stored
in a vector, using boost 1.35, as well as boost svn.
Here's a simplified test case
{{{
#include <fstream>
#include <vector>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/vector.hpp>
void test()
{
std::vector<int> vec;
std::ofstream ofs("file");
// boost::archive::text_oarchive oarc(ofs); // Compiles fine under
both GCC 4.0.1 and GCC 4.1
boost::archive::binary_oarchive oarc(ofs); // Compiles under GCC
4.0.1 but not GCC 4.1. Also compiles fine with boost 1.34/GCC 4.1
oarc & vec;
}
}}}
Whereas serializing to a text archive works fine under both compilers,
binary serialization triggers compiler errors under GCC 4.1
------------------
{{{
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp:
In instantiation of âconst int
boost::mpl::aux::template_arity_impl<boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,
char, std::char_traits<char> >::use_array_optimization, 3>::valueâ:
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp:93:
instantiated from âconst int
boost::mpl::aux::template_arity<boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,
char, std::char_traits<char> >::use_array_optimization>::valueâ
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp:98:
instantiated from
âboost::mpl::aux::template_arity<boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,
char, std::char_traits<char> >::use_array_optimization>â
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/apply.hpp:48:
instantiated from
âboost::mpl::apply1<boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,
char, std::char_traits<char> >::use_array_optimization, int>â
/Users/kostas/develop/ext/boost/boost/archive/binary_oarchive.hpp:53:
instantiated from
âboost::serialization::use_array_optimization<boost::archive::binary_oarchive>::apply<int>â
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp:119:
instantiated from âvoid boost::serialization::save(Archive&, const
std::vector<U, Allocator>&, unsigned int) [with Archive =
boost::archive::binary_oarchive, U = int, Allocator =
std::allocator<int>]â
/Users/kostas/develop/ext/boost/boost/serialization/split_free.hpp:45:
instantiated from âstatic void boost::serialization::free_saver<Archive,
T>::invoke(Archive&, const T&, unsigned int) [with Archive =
boost::archive::binary_oarchive, T = std::vector<int, std::allocator<int>
>]â
/Users/kostas/develop/ext/boost/boost/serialization/split_free.hpp:74:
instantiated from âvoid boost::serialization::split_free(Archive&, T&,
unsigned int) [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp:139:
instantiated from âvoid boost::serialization::serialize(Archive&,
std::vector<U, Allocator>&, unsigned int) [with Archive =
boost::archive::binary_oarchive, U = int, Allocator =
std::allocator<int>]â
/Users/kostas/develop/ext/boost/boost/serialization/serialization.hpp:133:
instantiated from âvoid boost::serialization::serialize_adl(Archive&, T&,
unsigned int) [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
/Users/kostas/develop/ext/boost/boost/archive/detail/oserializer.hpp:144:
instantiated from âvoid boost::archive::detail::oserializer<Archive,
T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*)
const [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
test3.cpp:15: instantiated from here
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp:85:
error: call of overloaded
âarity_helper(boost::mpl::aux::type_wrapper<boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,
char, std::char_traits<char> >::use_array_optimization>,
boost::mpl::aux::arity_tag<3>)â is ambiguous
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp:30:
note: candidates are: char (& boost::mpl::aux::arity_helper(...))[1]
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp:51:
note: char (&
boost::mpl::aux::arity_helper(boost::mpl::aux::type_wrapper<F<T1, T2, T3>
>, boost::mpl::aux::arity_tag<3>))[4] [with F =
boost::archive::basic_binary_oprimitive<Archive, Elem,
Tr>::use_array_optimization, T1 = boost::archive::binary_oarchive, T2 =
char, T3 = std::char_traits<char>]
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp:51:
note: char (&
boost::mpl::aux::arity_helper(boost::mpl::aux::type_wrapper<F<T1, T2, T3>
>, boost::mpl::aux::arity_tag<3>))[4] [with F =
boost::archive::basic_binary_oprimitive<Archive, Elem,
Tr>::use_array_optimization, T1 = boost::archive::binary_oarchive, T2 =
char, T3 = std::char_traits<char>]
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp:
In instantiation of âconst int
boost::mpl::aux::template_arity<boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,
char, std::char_traits<char> >::use_array_optimization>::valueâ:
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp:98:
instantiated from
âboost::mpl::aux::template_arity<boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,
char, std::char_traits<char> >::use_array_optimization>â
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/apply.hpp:48:
instantiated from
âboost::mpl::apply1<boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,
char, std::char_traits<char> >::use_array_optimization, int>â
/Users/kostas/develop/ext/boost/boost/archive/binary_oarchive.hpp:53:
instantiated from
âboost::serialization::use_array_optimization<boost::archive::binary_oarchive>::apply<int>â
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp:119:
instantiated from âvoid boost::serialization::save(Archive&, const
std::vector<U, Allocator>&, unsigned int) [with Archive =
boost::archive::binary_oarchive, U = int, Allocator =
std::allocator<int>]â
/Users/kostas/develop/ext/boost/boost/serialization/split_free.hpp:45:
instantiated from âstatic void boost::serialization::free_saver<Archive,
T>::invoke(Archive&, const T&, unsigned int) [with Archive =
boost::archive::binary_oarchive, T = std::vector<int, std::allocator<int>
>]â
/Users/kostas/develop/ext/boost/boost/serialization/split_free.hpp:74:
instantiated from âvoid boost::serialization::split_free(Archive&, T&,
unsigned int) [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp:139:
instantiated from âvoid boost::serialization::serialize(Archive&,
std::vector<U, Allocator>&, unsigned int) [with Archive =
boost::archive::binary_oarchive, U = int, Allocator =
std::allocator<int>]â
/Users/kostas/develop/ext/boost/boost/serialization/serialization.hpp:133:
instantiated from âvoid boost::serialization::serialize_adl(Archive&, T&,
unsigned int) [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
/Users/kostas/develop/ext/boost/boost/archive/detail/oserializer.hpp:144:
instantiated from âvoid boost::archive::detail::oserializer<Archive,
T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*)
const [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
test3.cpp:15: instantiated from here
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp:93:
error: â<expression error>â is not a valid template argument for type
âintâ because it is a non-constant expression
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp:
In instantiation of
âboost::mpl::aux::template_arity<boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,
char, std::char_traits<char> >::use_array_optimization>â:
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/apply.hpp:48:
instantiated from
âboost::mpl::apply1<boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,
char, std::char_traits<char> >::use_array_optimization, int>â
/Users/kostas/develop/ext/boost/boost/archive/binary_oarchive.hpp:53:
instantiated from
âboost::serialization::use_array_optimization<boost::archive::binary_oarchive>::apply<int>â
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp:119:
instantiated from âvoid boost::serialization::save(Archive&, const
std::vector<U, Allocator>&, unsigned int) [with Archive =
boost::archive::binary_oarchive, U = int, Allocator =
std::allocator<int>]â
/Users/kostas/develop/ext/boost/boost/serialization/split_free.hpp:45:
instantiated from âstatic void boost::serialization::free_saver<Archive,
T>::invoke(Archive&, const T&, unsigned int) [with Archive =
boost::archive::binary_oarchive, T = std::vector<int, std::allocator<int>
>]â
/Users/kostas/develop/ext/boost/boost/serialization/split_free.hpp:74:
instantiated from âvoid boost::serialization::split_free(Archive&, T&,
unsigned int) [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp:139:
instantiated from âvoid boost::serialization::serialize(Archive&,
std::vector<U, Allocator>&, unsigned int) [with Archive =
boost::archive::binary_oarchive, U = int, Allocator =
std::allocator<int>]â
/Users/kostas/develop/ext/boost/boost/serialization/serialization.hpp:133:
instantiated from âvoid boost::serialization::serialize_adl(Archive&, T&,
unsigned int) [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
/Users/kostas/develop/ext/boost/boost/archive/detail/oserializer.hpp:144:
instantiated from âvoid boost::archive::detail::oserializer<Archive,
T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*)
const [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
test3.cpp:15: instantiated from here
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp:98:
error: â<expression error>â is not a valid template argument for type
âintâ because it is a non-constant expression
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/apply.hpp:
In instantiation of
âboost::mpl::apply1<boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,
char, std::char_traits<char> >::use_array_optimization, int>â:
/Users/kostas/develop/ext/boost/boost/archive/binary_oarchive.hpp:53:
instantiated from
âboost::serialization::use_array_optimization<boost::archive::binary_oarchive>::apply<int>â
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp:119:
instantiated from âvoid boost::serialization::save(Archive&, const
std::vector<U, Allocator>&, unsigned int) [with Archive =
boost::archive::binary_oarchive, U = int, Allocator =
std::allocator<int>]â
/Users/kostas/develop/ext/boost/boost/serialization/split_free.hpp:45:
instantiated from âstatic void boost::serialization::free_saver<Archive,
T>::invoke(Archive&, const T&, unsigned int) [with Archive =
boost::archive::binary_oarchive, T = std::vector<int, std::allocator<int>
>]â
/Users/kostas/develop/ext/boost/boost/serialization/split_free.hpp:74:
instantiated from âvoid boost::serialization::split_free(Archive&, T&,
unsigned int) [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp:139:
instantiated from âvoid boost::serialization::serialize(Archive&,
std::vector<U, Allocator>&, unsigned int) [with Archive =
boost::archive::binary_oarchive, U = int, Allocator =
std::allocator<int>]â
/Users/kostas/develop/ext/boost/boost/serialization/serialization.hpp:133:
instantiated from âvoid boost::serialization::serialize_adl(Archive&, T&,
unsigned int) [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
/Users/kostas/develop/ext/boost/boost/archive/detail/oserializer.hpp:144:
instantiated from âvoid boost::archive::detail::oserializer<Archive,
T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*)
const [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
test3.cpp:15: instantiated from here
/Users/kostas/develop/ext/boost/boost/mpl/aux_/preprocessed/gcc/apply.hpp:48:
error: â<expression error>â is not a valid template argument for type
âintâ because it is a non-constant expression
/Users/kostas/develop/ext/boost/boost/archive/binary_oarchive.hpp: In
instantiation of
âboost::serialization::use_array_optimization<boost::archive::binary_oarchive>::apply<int>â:
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp:119:
instantiated from âvoid boost::serialization::save(Archive&, const
std::vector<U, Allocator>&, unsigned int) [with Archive =
boost::archive::binary_oarchive, U = int, Allocator =
std::allocator<int>]â
/Users/kostas/develop/ext/boost/boost/serialization/split_free.hpp:45:
instantiated from âstatic void boost::serialization::free_saver<Archive,
T>::invoke(Archive&, const T&, unsigned int) [with Archive =
boost::archive::binary_oarchive, T = std::vector<int, std::allocator<int>
>]â
/Users/kostas/develop/ext/boost/boost/serialization/split_free.hpp:74:
instantiated from âvoid boost::serialization::split_free(Archive&, T&,
unsigned int) [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp:139:
instantiated from âvoid boost::serialization::serialize(Archive&,
std::vector<U, Allocator>&, unsigned int) [with Archive =
boost::archive::binary_oarchive, U = int, Allocator =
std::allocator<int>]â
/Users/kostas/develop/ext/boost/boost/serialization/serialization.hpp:133:
instantiated from âvoid boost::serialization::serialize_adl(Archive&, T&,
unsigned int) [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
/Users/kostas/develop/ext/boost/boost/archive/detail/oserializer.hpp:144:
instantiated from âvoid boost::archive::detail::oserializer<Archive,
T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*)
const [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
test3.cpp:15: instantiated from here
/Users/kostas/develop/ext/boost/boost/archive/binary_oarchive.hpp:53:
error: no type named âtypeâ in âstruct
boost::mpl::apply1<boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,
char, std::char_traits<char> >::use_array_optimization, int>â
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp: In
function âvoid boost::serialization::save(Archive&, const std::vector<U,
Allocator>&, unsigned int) [with Archive =
boost::archive::binary_oarchive, U = int, Allocator =
std::allocator<int>]â:
/Users/kostas/develop/ext/boost/boost/serialization/split_free.hpp:45:
instantiated from âstatic void boost::serialization::free_saver<Archive,
T>::invoke(Archive&, const T&, unsigned int) [with Archive =
boost::archive::binary_oarchive, T = std::vector<int, std::allocator<int>
>]â
/Users/kostas/develop/ext/boost/boost/serialization/split_free.hpp:74:
instantiated from âvoid boost::serialization::split_free(Archive&, T&,
unsigned int) [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp:139:
instantiated from âvoid boost::serialization::serialize(Archive&,
std::vector<U, Allocator>&, unsigned int) [with Archive =
boost::archive::binary_oarchive, U = int, Allocator =
std::allocator<int>]â
/Users/kostas/develop/ext/boost/boost/serialization/serialization.hpp:133:
instantiated from âvoid boost::serialization::serialize_adl(Archive&, T&,
unsigned int) [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
/Users/kostas/develop/ext/boost/boost/archive/detail/oserializer.hpp:144:
instantiated from âvoid boost::archive::detail::oserializer<Archive,
T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*)
const [with Archive = boost::archive::binary_oarchive, T =
std::vector<int, std::allocator<int> >]â
test3.cpp:15: instantiated from here
/Users/kostas/develop/ext/boost/boost/serialization/vector.hpp:119: error:
no type named âtypeâ in âstruct
boost::serialization::use_array_optimization<boost::archive::binary_oarchive>::apply<int>â
}}}
----------------------
My compiler versions are
{{{
Using built-in specs.
Target: powerpc-apple-darwin9
Configured with: /var/tmp/gcc/gcc-5465~16/src/configure --disable-checking
-enable-werror --prefix=/usr --mandir=/share/man --enable-
languages=c,objc,c++,obj-c++ --program-transform-
name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0
--with-slibdir=/usr/lib --build=i686-apple-darwin9 --program-prefix=
--host=powerpc-apple-darwin9 --target=powerpc-apple-darwin9
Thread model: posix
gcc version 4.0.1 (Apple Inc. build 5465)
}}}
{{{
Using built-in specs.
Target: psp
Configured with: ../configure --prefix=/Users/kostas/develop/psp/pspdev
--target=psp --enable-languages=c,c++ --with-newlib --enable-cxx-flags=-G0
Thread model: single
gcc version 4.1.0 (PSPDEV 20060507)
}}}
Thanks in advance
-- Ticket URL: <http://svn.boost.org/trac/boost/ticket/2180> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:49:58 UTC