Skip to content

Issue with load_and_construct and versioning. #216

Closed
@Devacor

Description

@Devacor

I wanted to switch my code to the versioned save/load/serialize methods, but was having trouble with the namespace included in the following causing issues with the macro:

CEREAL_CLASS_VERSION(MV::Scene::Node, 1);

Because my version of cereal was pretty old I decided to pull and get latest, and I am no longer having issues with the above line, I changed the signature of serialize and load_and_construct from this original state:

template
void serialize(Archive & a_archive)

template
static void load_and_construct(Archive & a_archive, cereal::construct &a_construct)

To this:

template
void serialize(Archive & a_archive, const uint32_t a_version)

template
static void load_and_construct(Archive & a_archive, cereal::construct &a_construct, const uint32_t a_version)

And am now getting the following error which seems to indicate the load_and_construct is no longer actually being detected due to the versioned function signature:

1>C:\git\external\cereal\include\cereal/access.hpp(300): error C2512: 'MV::Scene::Node::Node': no appropriate default constructor available (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/details/traits.hpp(1209): note: see reference to function template instantiation 'T *cereal::access::construct<TT>(void)' being compiled
1>          with
1>          [
1>              T=MV::Scene::Node,
1>              TT=MV::Scene::Node
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/details/traits.hpp(1290): note: see reference to class template instantiation 'cereal::traits::is_default_constructible<T>' being compiled
1>          with
1>          [
1>              T=MV::Scene::Node
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/types/memory.hpp(307): note: see reference to class template instantiation 'cereal::detail::Construct<T,Archive,false,false>' being compiled
1>          with
1>          [
1>              T=MV::Scene::Node,
1>              Archive=cereal::JSONInputArchive
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(854): note: see reference to function template instantiation 'void cereal::load<AA,MV::Scene::Node>(Archive &,cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &> &)' being compiled
1>          with
1>          [
1>              AA=cereal::JSONInputArchive,
1>              Archive=cereal::JSONInputArchive
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(777): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::processImpl<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>,0>(T &)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive,
1>              T=cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(777): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::processImpl<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>,0>(T &)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive,
1>              T=cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(680): note: see reference to function template instantiation 'void cereal::InputArchive<cereal::JSONInputArchive,0>::process<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>&>(T)' being compiled
1>          with
1>          [
1>              T=cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &> &
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(680): note: see reference to function template instantiation 'void cereal::InputArchive<cereal::JSONInputArchive,0>::process<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>&>(T)' being compiled
1>          with
1>          [
1>              T=cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &> &
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/archives/json.hpp(858): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::operator ()<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>&>(cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &> &)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/archives/json.hpp(858): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::operator ()<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>&>(cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &> &)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(854): note: see reference to function template instantiation 'void cereal::load<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>>(cereal::JSONInputArchive &,cereal::NameValuePair<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>> &)' being compiled (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(777): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::processImpl<T,0>(T &)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive,
1>              T=cereal::NameValuePair<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>>
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(777): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::processImpl<T,0>(T &)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive,
1>              T=cereal::NameValuePair<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>>
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(680): note: see reference to function template instantiation 'void cereal::InputArchive<cereal::JSONInputArchive,0>::process<_Ty>(T &&)' being compiled
1>          with
1>          [
1>              _Ty=cereal::NameValuePair<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>>,
1>              T=cereal::NameValuePair<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>>
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(680): note: see reference to function template instantiation 'void cereal::InputArchive<cereal::JSONInputArchive,0>::process<_Ty>(T &&)' being compiled
1>          with
1>          [
1>              _Ty=cereal::NameValuePair<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>>,
1>              T=cereal::NameValuePair<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>>
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/types/memory.hpp(189): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::operator ()<cereal::NameValuePair<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>>>(cereal::NameValuePair<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>> &&)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/types/memory.hpp(189): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::operator ()<cereal::NameValuePair<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>>>(cereal::NameValuePair<cereal::memory_detail::PtrWrapper<std::shared_ptr<MV::Scene::Node> &>> &&)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(854): note: see reference to function template instantiation 'void cereal::load<AA,MV::Scene::Node>(Archive &,std::shared_ptr<MV::Scene::Node> &)' being compiled
1>          with
1>          [
1>              AA=cereal::JSONInputArchive,
1>              Archive=cereal::JSONInputArchive
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(777): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::processImpl<std::shared_ptr<MV::Scene::Node>,0>(T &)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive,
1>              T=std::shared_ptr<MV::Scene::Node>
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(777): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::processImpl<std::shared_ptr<MV::Scene::Node>,0>(T &)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive,
1>              T=std::shared_ptr<MV::Scene::Node>
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(680): note: see reference to function template instantiation 'void cereal::InputArchive<cereal::JSONInputArchive,0>::process<std::shared_ptr<MV::Scene::Node>&>(T)' being compiled
1>          with
1>          [
1>              T=std::shared_ptr<MV::Scene::Node> &
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(680): note: see reference to function template instantiation 'void cereal::InputArchive<cereal::JSONInputArchive,0>::process<std::shared_ptr<MV::Scene::Node>&>(T)' being compiled
1>          with
1>          [
1>              T=std::shared_ptr<MV::Scene::Node> &
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/archives/json.hpp(858): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::operator ()<std::shared_ptr<MV::Scene::Node>&>(std::shared_ptr<MV::Scene::Node> &)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/archives/json.hpp(858): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::operator ()<std::shared_ptr<MV::Scene::Node>&>(std::shared_ptr<MV::Scene::Node> &)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(854): note: see reference to function template instantiation 'void cereal::load<std::shared_ptr<MV::Scene::Node>&>(cereal::JSONInputArchive &,cereal::NameValuePair<std::shared_ptr<MV::Scene::Node> &> &)' being compiled (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(777): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::processImpl<T,0>(T &)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive,
1>              T=cereal::NameValuePair<std::shared_ptr<MV::Scene::Node> &>
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(777): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::processImpl<T,0>(T &)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive,
1>              T=cereal::NameValuePair<std::shared_ptr<MV::Scene::Node> &>
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(680): note: see reference to function template instantiation 'void cereal::InputArchive<cereal::JSONInputArchive,0>::process<_Ty>(T &&)' being compiled
1>          with
1>          [
1>              _Ty=cereal::NameValuePair<std::shared_ptr<MV::Scene::Node> &>,
1>              T=cereal::NameValuePair<std::shared_ptr<MV::Scene::Node> &>
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  C:\git\external\cereal\include\cereal/cereal.hpp(680): note: see reference to function template instantiation 'void cereal::InputArchive<cereal::JSONInputArchive,0>::process<_Ty>(T &&)' being compiled
1>          with
1>          [
1>              _Ty=cereal::NameValuePair<std::shared_ptr<MV::Scene::Node> &>,
1>              T=cereal::NameValuePair<std::shared_ptr<MV::Scene::Node> &>
1>          ] (compiling source file Source\DiggerGame\diggerGame.cpp)
1>  Source\DiggerGame\diggerGame.cpp(50): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::operator ()<cereal::NameValuePair<std::shared_ptr<MV::Scene::Node> &>>(cereal::NameValuePair<std::shared_ptr<MV::Scene::Node> &> &&)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive
1>          ]
1>  Source\DiggerGame\diggerGame.cpp(50): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::operator ()<cereal::NameValuePair<std::shared_ptr<MV::Scene::Node> &>>(cereal::NameValuePair<std::shared_ptr<MV::Scene::Node> &> &&)' being compiled
1>          with
1>          [
1>              ArchiveType=cereal::JSONInputArchive
1>          ]

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions