Serialization of a union type through a user-defined function: "static assertion failed :: typex :: value"

I am serializing the cl_long2 type from OpenCL, which is defined as this (simplified from /usr/include/CL/cl_platform.hpp ):

 typedef int64_t cl_long; typedef union { cl_long __attribute__ ((aligned(16))) s[2]; struct{ cl_long x, y; }; struct{ cl_long s0, s1; }; struct{ cl_long lo, hi; }; } cl_long2; 

I defined the following standalone serialization function:

 namespace boost{ namespace serialization { template<class Archive> void serialize(Archive &ar, cl_long2 &i, const unsigned version){ ar & make_nvp("x",ix); ar & make_nvp("y",iy); } }}; 

When I compile my code that causes cl_long2 to be serialized from a class member, I get the following error that I cannot understand (the error is the same if it is not std::vector<cl_long2> , just the substitution is a single variable):

 /usr/include/boost/archive/detail/check.hpp: In function 'void boost::archive::detail::check_object_level() [with T = cl_long2]': /usr/include/boost/archive/detail/iserializer.hpp:438:9: instantiated from 'static void boost::archive::detail::load_non_pointer_type<Archive>::invoke(Archive&, T&) [with T = cl_long2, Archive = boost::archive::xml_iarchive]' /usr/include/boost/archive/detail/iserializer.hpp:592:5: instantiated from 'void boost::archive::load(Archive&, T&) [with Archive = boost::archive::xml_iarchive, T = cl_long2]' /usr/include/boost/archive/detail/common_iarchive.hpp:66:9: instantiated from 'void boost::archive::detail::common_iarchive<Archive>::load_override(T&, int) [with T = cl_long2, Archive = boost::archive::xml_iarchive]' /usr/include/boost/archive/basic_xml_iarchive.hpp:86:9: instantiated from 'void boost::archive::basic_xml_iarchive<Archive>::load_override(const boost::serialization::nvp<T>&, int) [with T = cl_long2, Archive = boost::archive::xml_iarchive]' /usr/include/boost/archive/xml_iarchive.hpp:93:9: instantiated from 'void boost::archive::xml_iarchive_impl<Archive>::load_override(T&, int) [with T = const boost::serialization::nvp<cl_long2>, Archive = boost::archive::xml_iarchive]' /usr/include/boost/archive/detail/interface_iarchive.hpp:60:9: [ skipping 5 instantiation contexts ] /usr/include/boost/serialization/split_free.hpp:58:9: instantiated from 'static void boost::serialization::free_loader<Archive, T>::invoke(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_iarchive, T = std::vector<cl_long2>]' /usr/include/boost/serialization/split_free.hpp:74:5: instantiated from 'void boost::serialization::split_free(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_iarchive, T = std::vector<cl_long2>]' /usr/include/boost/serialization/vector.hpp:151:5: instantiated from 'void boost::serialization::serialize(Archive&, std::vector<U, Allocator>&, unsigned int) [with Archive = boost::archive::xml_iarchive, U = cl_long2, Allocator = std::allocator<cl_long2>]' /usr/include/boost/serialization/serialization.hpp:128:9: instantiated from 'void boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_iarchive, T = std::vector<cl_long2>]' /usr/include/boost/archive/detail/iserializer.hpp:188:5: instantiated from 'void boost::archive::detail::iserializer<Archive, T>::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) const [with Archive = boost::archive::xml_iarchive, T = std::vector<cl_long2>]' myFile.cpp:368:2: instantiated from here /usr/include/boost/archive/detail/check.hpp:60:5: error: static assertion failed: "typex::value" 

The same error appears regardless of whether the archive type is xml or binary. I am using boost :: serialization 1.46.

Any clues?

** EDIT: A smaller example, including an error, is at http://ideone.com/4UgCn

+4
source share
1 answer

If you look at the line where the statement is not executed ( detail / check.hpp : 60), there is a comment above it:

 // trap attempts to serialize objects marked // not_serializable BOOST_STATIC_ASSERT(typex::value); 

Documentation

+6
source

Source: https://habr.com/ru/post/1402309/


All Articles