I'm having some issues getting the following example to compile in
g++4.9, or clang 3.6, using boost 1.58.0
I'm not quite experienced enough with boost or c++ to be certain, but it
appears that the vector serialization is done in such a way that it
doesn't pick up the load_construct_data for time_period from
boost/date_time/posix_time/time_serialize.hpp
Is the fix simply to do my own vector serialization a situation like
this? Or is there another fix?
Thank in advance,
Lakin
$ cat test.cpp
#include
#include
#include
#include
#include
#include <vector>
#include <sstream>
class test
{
public:
friend class boost::serialization::access;
std::vectorboost::posix_time::time_period m_vec;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & m_vec;
}
};
int main(int argc, char *argv[]) {
test a;
std::ostringstream os;
boost::archive::text_oarchive oa(os);
oa << a;
std::istringstream is(os.str());
boost::archive::text_iarchive ia(is);
ia >> a;
std::cout << os.str() << std::endl;
return 0;
}
$ g++ -std=c++14 test.cpp -I deps/boost_1_58_0
In file included from /usr/include/c++/4.9/memory:64:0,
from deps/boost_1_58_0/boost/config/no_tr1/memory.hpp:21,
from deps/boost_1_58_0/boost/smart_ptr/shared_ptr.hpp:23,
from deps/boost_1_58_0/boost/shared_ptr.hpp:17,
from
deps/boost_1_58_0/boost/date_time/gregorian/greg_month.hpp:14,
from
deps/boost_1_58_0/boost/date_time/gregorian/greg_ymd.hpp:16,
from
deps/boost_1_58_0/boost/date_time/gregorian/greg_calendar.hpp:16,
from
deps/boost_1_58_0/boost/date_time/gregorian/gregorian_types.hpp:19,
from
deps/boost_1_58_0/boost/date_time/posix_time/posix_time_config.hpp:18,
from
deps/boost_1_58_0/boost/date_time/posix_time/posix_time_system.hpp:13,
from
deps/boost_1_58_0/boost/date_time/posix_time/ptime.hpp:12,
from
deps/boost_1_58_0/boost/date_time/posix_time/posix_time.hpp:15,
from
deps/boost_1_58_0/boost/date_time/posix_time/time_serialize.hpp:12,
from test.cpp:1:
/usr/include/c++/4.9/bits/stl_construct.h: In instantiation of ‘void
std::_Construct(_T1*, _Args&& ...) [with _T1 =
boost::date_time::period; _Args = {}]’:
/usr/include/c++/4.9/bits/stl_uninitialized.h:516:43: required from
‘static void
std::__uninitialized_default_n_1<_TrivialValueType>::__uninit_default_n(_ForwardIterator,
_Size) [with _ForwardIterator =
boost::date_time::period*; _Size = long unsigned int; bool
_TrivialValueType = false]’
/usr/include/c++/4.9/bits/stl_uninitialized.h:571:33: required from
‘void std::__uninitialized_default_n(_ForwardIterator, _Size) [with
_ForwardIterator = boost::date_time::period*; _Size = long unsigned int]’
/usr/include/c++/4.9/bits/stl_uninitialized.h:632:50: required from
‘void std::__uninitialized_default_n_a(_ForwardIterator, _Size,
std::allocator<_Tp>&) [with _ForwardIterator =
boost::date_time::period*; _Size = long unsigned int; _Tp =
boost::date_time::period]’
/usr/include/c++/4.9/bits/vector.tcc:549:39: required from ‘void
std::vector<_Tp, _Alloc>::_M_default_append(std::vector<_Tp,
_Alloc>::size_type) [with _Tp =
boost::date_time::period; _Alloc =
std::allocator >; std::vector<_Tp, _Alloc>::size_type
= long unsigned int]’
/usr/include/c++/4.9/bits/stl_vector.h:676:41: required from ‘void
std::vector<_Tp, _Alloc>::resize(std::vector<_Tp, _Alloc>::size_type)
[with _Tp = boost::date_time::period; _Alloc =
std::allocator >; std::vector<_Tp, _Alloc>::size_type
= long unsigned int]’
deps/boost_1_58_0/boost/serialization/vector.hpp:90:9: [ skipping 24
instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
deps/boost_1_58_0/boost/archive/detail/iserializer.hpp:618:24: required
from ‘void boost::archive::load(Archive&, T&) [with Archive =
boost::archive::text_iarchive; T = test]’
deps/boost_1_58_0/boost/archive/detail/common_iarchive.hpp:66:40:
required from ‘void
boost::archive::detail::common_iarchive<Archive>::load_override(T&, int)
[with T = test; Archive = boost::archive::text_iarchive]’
deps/boost_1_58_0/boost/archive/basic_text_iarchive.hpp:71:9: required
from ‘void
boost::archive::basic_text_iarchive<Archive>::load_override(T&, int)
[with T = test; Archive = boost::archive::text_iarchive]’
deps/boost_1_58_0/boost/archive/text_iarchive.hpp:92:57: required from
‘void boost::archive::text_iarchive_impl<Archive>::load_override(T&,
int) [with T = test; Archive = boost::archive::text_iarchive]’
deps/boost_1_58_0/boost/archive/detail/interface_iarchive.hpp:60:9:
required from ‘Archive&
boost::archive::detail::interface_iarchive<Archive>::operator>>(T&)
[with T = test; Archive = boost::archive::text_iarchive]’
test.cpp:36:11: required from here
/usr/include/c++/4.9/bits/stl_construct.h:75:7: error: no matching
function for call to ‘boost::date_time::period::period()’
{ ::new(static_cast(__p))
_T1(std::forward<_Args>(__args)...); }
^
/usr/include/c++/4.9/bits/stl_construct.h:75:7: note: candidates are:
In file included from
deps/boost_1_58_0/boost/date_time/gregorian/gregorian_types.hpp:18:0,
from
deps/boost_1_58_0/boost/date_time/posix_time/posix_time_config.hpp:18,
from
deps/boost_1_58_0/boost/date_time/posix_time/posix_time_system.hpp:13,
from
deps/boost_1_58_0/boost/date_time/posix_time/ptime.hpp:12,
from
deps/boost_1_58_0/boost/date_time/posix_time/posix_time.hpp:15,
from
deps/boost_1_58_0/boost/date_time/posix_time/time_serialize.hpp:12,
from test.cpp:1:
deps/boost_1_58_0/boost/date_time/period.hpp:101:3: note:
boost::date_time::period::period(point_rep,
duration_rep) [with point_rep = boost::posix_time::ptime; duration_rep =
boost::posix_time::time_duration]
period::period(point_rep first_point,
duration_rep len) :
^
deps/boost_1_58_0/boost/date_time/period.hpp:101:3: note: candidate
expects 2 arguments, 0 provided
deps/boost_1_58_0/boost/date_time/period.hpp:90:3: note:
boost::date_time::period::period(point_rep,
point_rep) [with point_rep = boost::posix_time::ptime; duration_rep =
boost::posix_time::time_duration]
period::period(point_rep first_point,
^
deps/boost_1_58_0/boost/date_time/period.hpp:90:3: note: candidate
expects 2 arguments, 0 provided
deps/boost_1_58_0/boost/date_time/period.hpp:51:9: note: constexpr
boost::date_time::period::period(const
boost::date_time::period&)
class period : private
^
deps/boost_1_58_0/boost/date_time/period.hpp:51:9: note: candidate
expects 1 argument, 0 provided
deps/boost_1_58_0/boost/date_time/period.hpp:51:9: note: constexpr
boost::date_time::period::period(boost::date_time::period&&)
deps/boost_1_58_0/boost/date_time/period.hpp:51:9: note: candidate
expects 1 argument, 0 provided