diff -ur boost_1_47_0/boost/archive/basic_binary_iarchive.hpp boost_1_47_0.fixed/boost/archive/basic_binary_iarchive.hpp
|
old
|
new
|
|
| 97 | 97 | } |
| 98 | 98 | void load_override(class_id_type & t, int version){ |
| 99 | 99 | library_version_type lvt = this->get_library_version(); |
| | 100 | /* |
| | 101 | * library versions: |
| | 102 | * boost 1.39 -> 5 |
| | 103 | * boost 1.43 -> 7 |
| | 104 | * boost 1.47 -> 9 |
| | 105 | * |
| | 106 | * |
| | 107 | * 1) in boost 1.43 and inferior, class_id_type is always a 16bit value, with no check on the library version |
| | 108 | * --> this means all archives with version v <= 7 are written with a 16bit class_id_type |
| | 109 | * 2) in boost 1.44 this load_override has disappeared (and thus boost 1.44 is not backward compatible at all !!) |
| | 110 | * 3) recent boosts reintroduced load_override with a test on the version : |
| | 111 | * - v > 7 : this->detail_common_iarchive::load_override(t, version) |
| | 112 | * - v > 6 : 16bit |
| | 113 | * - other : 32bit |
| | 114 | * --> which is obviously incorrect, see point 1 |
| | 115 | * |
| | 116 | * the fix here decodes class_id_type on 16bit for all v <= 7, which seems to be the correct behaviour ... |
| | 117 | */ |
| 100 | 118 | if(boost::archive::library_version_type(7) < lvt){ |
| 101 | 119 | this->detail_common_iarchive::load_override(t, version); |
| 102 | 120 | } |
| 103 | | else |
| 104 | | if(boost::archive::library_version_type(6) < lvt){ |
| 105 | | int_least16_t x=0; |
| 106 | | * this->This() >> x; |
| 107 | | t = boost::archive::class_id_type(x); |
| 108 | | } |
| 109 | 121 | else{ |
| 110 | | int x=0; |
| | 122 | int_least16_t x=0; |
| 111 | 123 | * this->This() >> x; |
| 112 | 124 | t = boost::archive::class_id_type(x); |
| 113 | 125 | } |