boostorg / boostorg/serialization

Boost serialization (bug?) issue with MSVC, with vector<shared_ptr> in several libraries

Open
#183 22 comments 0 reactions 0 assignees View on GitHub
waiting-for-input
Dominant language
C++
Stars
134
Forks
148
Avg merge
2d 23h
Merged PRs (30d)
5

Description

We use boost serialization in ours projects, both on linux (gcc) and Windows. We encounter a problem only on Windows (for "every" versions of Windows (7 and 10) and of MSVC: Visual 2010 and 2015, ie. MSVC++ 10.0 _MSC_VER == 1600 or MSVC++ 14.0 _MSC_VER == 1900).

**Here is the problem summarized**: When I serialize a class

- which have base class
- and have 2 vector of shared_ptr of ClassB, with the same contents, and B inherits from the same base class

the serialization works, but the deserialization doesn't ("input stream error").
![image](https://user-images.githubusercontent.com/26554495/69647542-f9655680-1069-11ea-9b46-07cd7e96c5b6.png)

It's very strange:

- if I remove the base class, it works.
- if I inline the serialization code (empty function) of the base class, it works.
- if the 2 vectors don't have the same content, it works !!
- if I register the ClassBase in the serialize method of ClassTest, it works. I.e.:

```
// in ClassTest:
template
void serialize(Archive & ar, const unsigned int version) {
ar.template register_type();
...
}
```

**Some details**

**When it works** on linux, and when it works on Windows with ClassBase type registration in the archive, we have the same xml output.
It's worth noting that:

- boost_serialization is version 17 on Windows and 9 on linux (I didn't tried to update boost on linux yet).
- On BaseClass xml tag, the tracking_level="1", so we have object_id.

**And when it doesn't work** (once again: the serialization of ClassTest is OK, but cannot deserialized "input stream error"):

- The main difference is in the serialization of ClassTest: the ClassBase part has no tracking_level.
- However it's not the only cause, because if the vectors are differents (same 2 first items, and a third item in one vector), tracking_level of ClassBase in ClassTest part is "0".

I've posted a visual studio solution [here](https://1drv.ms/u/s!Aoy4ax0S3ZS5gkxv1UIvRUd32oVO?e=ACVi4c).

Thanks a lot for your help. And if any clarification is needed, I'm available of course !

N.B.: I compiled with the last development version of boost serialization, the issue remains.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.