[29] | 1 | <!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
---|
| 2 | <html> |
---|
| 3 | <!-- |
---|
| 4 | (C) Copyright 2002-4 Robert Ramey - http://www.rrsd.com . |
---|
| 5 | Use, modification and distribution is subject to the Boost Software |
---|
| 6 | License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at |
---|
| 7 | http://www.boost.org/LICENSE_1_0.txt) |
---|
| 8 | --> |
---|
| 9 | <head> |
---|
| 10 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
---|
| 11 | <link rel="stylesheet" type="text/css" href="../../../boost.css"> |
---|
| 12 | <link rel="stylesheet" type="text/css" href="style.css"> |
---|
| 13 | <title>Serialization - Implementation Notes</title> |
---|
| 14 | </head> |
---|
| 15 | <body link="#0000ff" vlink="#800080"> |
---|
| 16 | <table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header"> |
---|
| 17 | <tr> |
---|
| 18 | <td valign="top" width="300"> |
---|
| 19 | <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3> |
---|
| 20 | </td> |
---|
| 21 | <td valign="top"> |
---|
| 22 | <h1 align="center">Serialization</h1> |
---|
| 23 | <h2 align="center">Implementation Notes</h2> |
---|
| 24 | </td> |
---|
| 25 | </tr> |
---|
| 26 | </table> |
---|
| 27 | <hr> |
---|
| 28 | <dl class="page-index"> |
---|
| 29 | <dt><a href="#functiontemplateordering">Partial Function Template Ordering</a> |
---|
| 30 | <dt><a href="#charencoding">Character Encoding</a> |
---|
| 31 | <dt><a href="#tempatesyntax">Template Invocation syntax</a> |
---|
| 32 | <dt><a href="#partialtemplatespecialization">Partial Template Specialization</a> |
---|
| 33 | <dt><a href="#othercompilerissues">Specific Compiler/Library Issues</a> |
---|
| 34 | <dl class="page-index"> |
---|
| 35 | <dt><a href="#gcc3x">GCC 3.X, 4.X</a> |
---|
| 36 | <dt><a href="#gcc295">GCC 2.95</a> |
---|
| 37 | <dt><a href="#intel80">Intel 8.0</a> |
---|
| 38 | <dt><a href="#vc80">Visual C++ 8.0</a> |
---|
| 39 | <dt><a href="#vc71">Visual C++ 7.1</a> |
---|
| 40 | <dt><a href="#vc70">Visual C++ 7.0</a> |
---|
| 41 | <dt><a href="#vc6">Visual C++ 6.0</a> |
---|
| 42 | <dt><a href="#borland">Borland 5.64 and 5.51</a> |
---|
| 43 | <dt><a href="#comeau">Comeau 4.3.3</a> |
---|
| 44 | <dt><a href="#codewarrior9">Code Warrior 9.x</a> |
---|
| 45 | <dt><a href="#codewarrior">Code Warrior 8.3</a> |
---|
| 46 | <dt><a href="#tru64">TRU64</a> |
---|
| 47 | <dt><a href="#dinkumware">Dinkumware Library</a> |
---|
| 48 | <dt><a href="#stlport">STLPort 4.5.3</a> |
---|
| 49 | </dl> |
---|
| 50 | </dl> |
---|
| 51 | |
---|
| 52 | <h3><a name="functiontemplateordering">Partial Function Template Ordering</a></h3> |
---|
| 53 | Not all C++ compilers correctly support partial function template ordering (PFTO). |
---|
| 54 | For these compilers, the following code will fail to compile: |
---|
| 55 | <pre><code> |
---|
| 56 | template<class Archive, class T> |
---|
| 57 | void serialize( |
---|
| 58 | Archive & ar, |
---|
| 59 | T & t, |
---|
| 60 | const unsigned int file_version |
---|
| 61 | ){ |
---|
| 62 | ... |
---|
| 63 | } |
---|
| 64 | |
---|
| 65 | template<class Archive, class T> |
---|
| 66 | void serialize( |
---|
| 67 | Archive & ar, |
---|
| 68 | my_template<T> & t, |
---|
| 69 | const unsigned int file_version |
---|
| 70 | ){ |
---|
| 71 | ... |
---|
| 72 | } |
---|
| 73 | </pre></code> |
---|
| 74 | The serialization library works around this issue by using a different |
---|
| 75 | default definition of the first template: |
---|
| 76 | <pre><code> |
---|
| 77 | template<class Archive, class T> |
---|
| 78 | void serialize( |
---|
| 79 | Archive & ar, |
---|
| 80 | T & t, |
---|
| 81 | const unsigned long int file_version // Note: change to long |
---|
| 82 | ){ |
---|
| 83 | ... |
---|
| 84 | } |
---|
| 85 | </pre></code> |
---|
| 86 | Now, the second template is not matched with the first one so there |
---|
| 87 | is no PFTO and no compile error. When the serialization library invokes |
---|
| 88 | <pre><code> |
---|
| 89 | serialize(ar, t, 0); |
---|
| 90 | </pre></code> |
---|
| 91 | the function declaration is first matched against templates with |
---|
| 92 | an integer for the third argument. If there is a match, the matching |
---|
| 93 | template is instantiated and later invoked. If there is no match, |
---|
| 94 | an attempt is made to match other templates by converting arguments to other types. |
---|
| 95 | In this case the third argument can be converted to long to match |
---|
| 96 | the first template - which is the default. So in this case, the first |
---|
| 97 | template will be instantiated and later invoked. We have managed to |
---|
| 98 | use function overloading to achieve the same effect as PFTO |
---|
| 99 | were it correctly implemented. |
---|
| 100 | <p> |
---|
| 101 | This depends upon undefined behavior of a compiler already |
---|
| 102 | determined to be non-conforming. In other words, there is no |
---|
| 103 | guarantee that this will work on all compilers. If a compiler does not |
---|
| 104 | correctly support PFTO and this method cannot be used to workaround |
---|
| 105 | it, non-intrusive serialization cannot be supported for that compiler. |
---|
| 106 | As of this writing, such a compiler has not been encountered. |
---|
| 107 | <p> |
---|
| 108 | It turns out that using this "trick" can create problems with |
---|
| 109 | compilers that DO correctly support PFTO. For this reason we |
---|
| 110 | define a macro <code style="white-space: normal">BOOST_PTFO</code> which |
---|
| 111 | is defined to be <code style="white-space: normal">long</code> |
---|
| 112 | for non-conforming compilers and nothing for conforming ones. So |
---|
| 113 | the default definition is really: |
---|
| 114 | The serialization library works around this issue by using a different |
---|
| 115 | default definition of the first template: |
---|
| 116 | <pre><code> |
---|
| 117 | template<class Archive, class T> |
---|
| 118 | void serialize( |
---|
| 119 | Archive & ar, |
---|
| 120 | T & t, |
---|
| 121 | const unsigned BOOST_PFTO int file_version // Note: change to BOOST_PFTO |
---|
| 122 | ){ |
---|
| 123 | ... |
---|
| 124 | } |
---|
| 125 | </pre></code> |
---|
| 126 | |
---|
| 127 | <h3><a name="charencoding">Character Encoding</a></h3> |
---|
| 128 | The whole question of character encoding combined with wide characters |
---|
| 129 | is much more complicated than it would seem to be. The current library |
---|
| 130 | defines in 3 formats (text, binary, and XML), wide and narrow characters, |
---|
| 131 | an attempts to be portable between compiler libraries. The results of |
---|
| 132 | a rather long consideration of all these factors has been to set |
---|
| 133 | default encoding according to the following rules. |
---|
| 134 | <ul> |
---|
| 135 | <li>All text archives (i.e. <code style="white-space: normal">text_?archive</code>) will produce |
---|
| 136 | text output in the current stream <code style="white-space: normal">locale</code>. Generally this will |
---|
| 137 | produce no changes in string data. |
---|
| 138 | <li>To produce binary output with Microsoft compilers, the stream |
---|
| 139 | will have to be opened with mode <code style="white-space: normal">ios::binary</code>. |
---|
| 140 | Failure to do so will result in 0x0d characters (carriage-return) |
---|
| 141 | characters being removed from the input stream if they are followed |
---|
| 142 | by a 0x0a character (line-feed). This could corrupt the input |
---|
| 143 | and make the file unreadable. On UNIX systems the <code style="white-space: normal">ios::binary</code> |
---|
| 144 | is not required and is ignored if used. |
---|
| 145 | <li>character XML archives (i.e. xml_oarchive) will produce XML output |
---|
| 146 | with characters encoded according to the current stream <code style="white-space: normal">locale</code>. |
---|
| 147 | <li>wide character XML archives (i.e. xml_woarchive) will produce |
---|
| 148 | files encoded in UTF-8. |
---|
| 149 | </ul> |
---|
| 150 | This character encoding is implemented by changing the <code style="white-space: normal">locale</code> of the |
---|
| 151 | i/o stream used by an archive when the archive is constructed, the stream |
---|
| 152 | local is changed back to its original value. This action can be overridden |
---|
| 153 | by specifying <code style="white-space: normal">boost::archive::no_codecvt</code> |
---|
| 154 | when the archive is opened. In this case, the stream <code style="white-space: normal">locale</code> will |
---|
| 155 | not be changed by the serialization library. |
---|
| 156 | <p> |
---|
| 157 | Note that the code conversion included for wide character text and XML |
---|
| 158 | archives could alter <code style="white-space: normal">std::string</code> data stored in archives. |
---|
| 159 | Suppose a normal (multi-byte) character string |
---|
| 160 | is written to a wide character stream. Our system uses the current <code style="white-space: normal">locale</code> |
---|
| 161 | to translate it to a wide character string before writing it out. |
---|
| 162 | Upon reading, it is translated back to a (multi-byte)string. |
---|
| 163 | If the <code style="white-space: normal">locale</code> on the platform that reads the archive is different than |
---|
| 164 | the <code style="white-space: normal">locale</code> on the platform that wrote the stream, the actual string data |
---|
| 165 | may be altered by the serialization process. To avoid this, either |
---|
| 166 | avoid usage of <code style="white-space: normal">locale</code> dependent multi-byte strings or be sure that |
---|
| 167 | the <code style="white-space: normal">locale</code> is set correctly before reading the archive. |
---|
| 168 | <p> |
---|
| 169 | To produce wide character text output (i.e. 16 bit characters on Win32 systems), |
---|
| 170 | do the following. |
---|
| 171 | <ul> |
---|
| 172 | <li>Open a wide character stream. |
---|
| 173 | <li>Alter the stream <code style="white-space: normal">locale</code> to use |
---|
| 174 | <code style="white-space: normal">boost::archive::codecvt_null<OStream::char_type></code> |
---|
| 175 | <li>Create the archive with the flag <code style="white-space: normal">no_codecvt</code>. |
---|
| 176 | </ul> |
---|
| 177 | Naturally, the input process has to be symmetrical. |
---|
| 178 | <h3><a name="partialtemplatespecialization">Partial Template Specialization</a></h3> |
---|
| 179 | Compilers which fail to support partial template specialization will fail to compile |
---|
| 180 | the following code. To make this compiler, the <code style="white-space: normal">const</code> has to be removed. |
---|
| 181 | <pre><code> |
---|
| 182 | void f(A const* a, text_oarchive& oa) |
---|
| 183 | { |
---|
| 184 | oa << a; |
---|
| 185 | } |
---|
| 186 | </code></pre> |
---|
| 187 | <h3><a name="tempatesyntax">Template Invocation syntax</a></h3> |
---|
| 188 | Some compilers may not recognize the syntax: |
---|
| 189 | <pre><code> |
---|
| 190 | ar.template register_type<T>(); |
---|
| 191 | </code></pre> |
---|
| 192 | for "registering" derived pointers of polymorphic classes. The actual |
---|
| 193 | function prototype is: |
---|
| 194 | <pre><code> |
---|
| 195 | template<T> |
---|
| 196 | void register_type(T * t = NULL); |
---|
| 197 | </code></pre> |
---|
| 198 | so that one may write <code style="white-space: normal">ar.register_type(static_cast<T *>(NULL))</code> instead of |
---|
| 199 | the syntax described above. |
---|
| 200 | </ul> |
---|
| 201 | <h3><a name="othercompilerissues">Specific Compiler/Library Issues</a></h3> |
---|
| 202 | |
---|
| 203 | <h4><a name="gcc3x">GCC 3.X, 4.X</a></h4> |
---|
| 204 | <ul> |
---|
| 205 | <li>GCC versions for Cygwin and MinGW fail to support wide character I/O. |
---|
| 206 | So all tests using wide char I/O fail. Note that if wide character I/O support |
---|
| 207 | is added with STLPort, all tests complete successfully. |
---|
| 208 | <li>This compiler generates long warning messages related to the usage of |
---|
| 209 | non virtual destructors in polymorphic classes. These warnings have been |
---|
| 210 | carfully considered and the code that generates these warning has been |
---|
| 211 | unchanged. In this case the warning should should be ignored as in certain |
---|
| 212 | usages of the library, making the destructors virtual could lead to problems. |
---|
| 213 | As an alternative, base class destructors have been make "protected" to |
---|
| 214 | address the concerns that motivate these warning messages. When building |
---|
| 215 | the serialization library and tests with bjam, these warnings are suppressed. |
---|
| 216 | When building one's own applications, these warnings can be suppressed by |
---|
| 217 | adding the following to the compiler command line: |
---|
| 218 | <pre><code> |
---|
| 219 | -Wno-non-virtual-dtor |
---|
| 220 | -Wno-ctor-dtor-privacy |
---|
| 221 | </code></pre> |
---|
| 222 | </ul> |
---|
| 223 | <h4><a name="gcc295">GCC 2.95</a></h4> |
---|
| 224 | All of the above plus:<br> |
---|
| 225 | <ul> |
---|
| 226 | <li>The serialization library depends on the templeted stream implemention |
---|
| 227 | to function properly. So STLPort must be used to build the library. |
---|
| 228 | <li>Polymorphic archive tests fail. |
---|
| 229 | <li>XML serialization only works with version 1.6x of spirit. In order to build |
---|
| 230 | and use this library with this compiler, one must use version 1.6x rather than the |
---|
| 231 | latest version shipped with boost. See <a href="release.html">Release Notes</a>. |
---|
| 232 | </ul> |
---|
| 233 | <h4><a name="Intel80">Intel C++ 8.0</a></h4> |
---|
| 234 | No known issues. All tests compile and run in debug and release modes. |
---|
| 235 | |
---|
| 236 | <h4><a name="vc80">Visual C++ 8.0</a></h4> |
---|
| 237 | This compiler emits warnings for calls to functions from the standard |
---|
| 238 | library which are deemed security risks. The serialization depends upon |
---|
| 239 | making some of these calls so programs which use the serialization library |
---|
| 240 | will get warning messages. These messages can be suppressed from the command |
---|
| 241 | line by including the following switch: |
---|
| 242 | <pre><code> |
---|
| 243 | /wd4996 |
---|
| 244 | </code></pre> |
---|
| 245 | |
---|
| 246 | <h4><a name="vc71">Visual C++ 7.1</a></h4> |
---|
| 247 | Derivation from an archive class defined in a DLL as described in ... will not work. |
---|
| 248 | This is due to the way that VC++ handles templeted code with __decl(dllexport) and |
---|
| 249 | __decl(dllimport) specifications. Basically, this compiler requires that all the |
---|
| 250 | instantiations have the same specification - even though they have different |
---|
| 251 | template arguments. The example <code style="white-space: normal"> |
---|
| 252 | demo_portable_iarchive.cpp</code> would have to reformulated as a library or dll |
---|
| 253 | similar to the pre-defined archives in order to function. |
---|
| 254 | <p> |
---|
| 255 | This compiler does not have RTTI or exception handling turned on by default. Although |
---|
| 256 | they are not strictly necessary to use the serialization package, the example and test |
---|
| 257 | program presume that they are enabled. So be sure your command line or IDE settings |
---|
| 258 | enable these features if you want |
---|
| 259 | these switches are enabled if you want to build and run these programs. |
---|
| 260 | |
---|
| 261 | <h5>Using the Visual C++ IDE</h5> |
---|
| 262 | The library includes a VC++ 7.1 "Solution" - <code style="white-space: normal">BoostSerializationLibrary</code> |
---|
| 263 | along with of a set of project files - one for each demo and test. Consider the following if you |
---|
| 264 | decided to use these configurations. |
---|
| 265 | <ul> |
---|
| 266 | <li>The projects assume that the tests have been built with bjam using the default |
---|
| 267 | locations. This will result in a <code style="white-space: normal">bin</code> subdirectory |
---|
| 268 | within one's main boost directory. Below this there is a whole structure which maintains |
---|
| 269 | object and library files according to the type of build. The easiest way to build this is to |
---|
| 270 | invoke the runtest script which uses bjam. (see below) If the libraries are not in these locations, |
---|
| 271 | the projects will have to be modified accordingly. |
---|
| 272 | <li>There are project configurations for all the combinations of build variants that boost |
---|
| 273 | supports. That is for release, debug, static, static multi-threading, etc.. |
---|
| 274 | <li>If you want to use/debug the DLL versions of libraries and corresponding tests, alter |
---|
| 275 | the project file to define <code style="white-space: normal">BOOST_ALL_DYN_LINK=1</code>. |
---|
| 276 | Note that for the executables to run, the <code style="white-space: normal">PATH</code> |
---|
| 277 | environmental variable will have to include the directories that contain the DLL versions of |
---|
| 278 | the boost libraries. |
---|
| 279 | <li>If you have difficulties building your own projects and linking with the boost libraries, |
---|
| 280 | compare the project settings of your own projects with the ones here. VC sometimes requires |
---|
| 281 | consistent settings between projects and the libraries they use in order to link properly. |
---|
| 282 | In particular, check support for exceptions, runtime typing(RTTI), and intrinsic support for |
---|
| 283 | wide characters. The standard version of this library presumes that these facilities are |
---|
| 284 | enabled. Projects generated by the IDE wizard do not have these features enabled by default. |
---|
| 285 | <li>Frequently when trying to build a project or view project properties, one is presented with |
---|
| 286 | a message box with the message "unspecified error". This seems to occur when one changes the |
---|
| 287 | build configuration selection. It turns out this can be "fixed" by going to the "Build" |
---|
| 288 | menu item, selecting "Configuration Manager" and selecting a build configuration for the project |
---|
| 289 | you're working with. |
---|
| 290 | <li>To test that boost libraries are built correctly, one can build and test them the way we do. |
---|
| 291 | This entails: |
---|
| 292 | <ol> |
---|
| 293 | <li>downloading a copy of bjam.exe |
---|
| 294 | <li>building process_jam_log |
---|
| 295 | <li>building compiler_status |
---|
| 296 | <li>invoking runtest.bat |
---|
| 297 | </ol> |
---|
| 298 | This will build the serialization library and run the tests on your system. If there are more than a |
---|
| 299 | a couple of test failures, you likely won't be able to get your own projects working. If most of the |
---|
| 300 | tests pass, you can be confident that your own projects will work once you get your project settings |
---|
| 301 | in sync with those included here. |
---|
| 302 | </ul> |
---|
| 303 | |
---|
| 304 | <h4><a name="vc70">Visual C++ 7.0</a></h4> |
---|
| 305 | <ul> |
---|
| 306 | <li>The "pimpl" demo fails to link. Cause and workaround for this is unknown |
---|
| 307 | <li>XML serialization only works with version 1.6x of spirit. In order to build and use this |
---|
| 308 | library with this compiler, one must use version 1.6x rather than the latest version |
---|
| 309 | shipped with boost. See <a href="release.html">Release Notes</a>. |
---|
| 310 | <li>This compiler does not support partial template specialization. |
---|
| 311 | The implementation of the new <code>shared_ptr</code> serialization depends upon |
---|
| 312 | compiler support for partial template specialization. This compiler doesn't implement this |
---|
| 313 | feature. In order to serialize <code style="white-space: normal">shared_ptr<A></code>, |
---|
| 314 | invoke the macro <code style="white-space: normal">BOOST_SERIALIZATION_SHARED_PTR(A)</code> |
---|
| 315 | in the header code. |
---|
| 316 | <li>Lack of support for partial template specialization also creates problems for |
---|
| 317 | serialization of <code style="white-space: normal">std::map</code>. In order to serialize |
---|
| 318 | instances of this type include the invocation of BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION |
---|
| 319 | for the key type of the map. |
---|
| 320 | </ul> |
---|
| 321 | <h4><a name="vc6">Visual C++ 6.5</a></h4> |
---|
| 322 | all the above issues for Visual C++ 7.0 plus: |
---|
| 323 | <ul> |
---|
| 324 | <li>Out of line template definitions are not recognized and fail with a confusing |
---|
| 325 | error message. To function save/load/serialize member function templates must be defined |
---|
| 326 | within the class definition. This feature is essential to <code style="white-space: normal">demo_pimpl</code>. Hence, |
---|
| 327 | this program will fail to compile. In this case the problem can't be worked around and |
---|
| 328 | still demonstrate this facility. |
---|
| 329 | <li>This compiler does not support <code style="white-space: normal">wchar_t</code> as a separate type. It defines |
---|
| 330 | <code style="white-space: normal">wchar_t</code> as an alias for <code style="white-space: normal">short int</code>. In general things will still |
---|
| 331 | function. However certain customization, such as overloading archive operators for |
---|
| 332 | saving/loading wide character arrays would produce surprises in this environment. |
---|
| 333 | <li>Under certain circumstances, a program will fail to link with the message: |
---|
| 334 | LIN1179 - "invalid or corrupt file: duplicate comdat". According |
---|
| 335 | to <a href="http://groups.google.com/groups?th=8a05c82c4ffee280"> |
---|
| 336 | http://groups.google.com/groups?th=8a05c82c4ffee280 |
---|
| 337 | </a> (look for P78) |
---|
| 338 | A LNK1179 error occurs when: |
---|
| 339 | <ul> |
---|
| 340 | <li>The template class takes at least two arguments. |
---|
| 341 | <li>The template is used at least two times with identical first |
---|
| 342 | and different second arguments. |
---|
| 343 | <li>The static member variable is of an object type with at least one |
---|
| 344 | base class. (In another scenario it also occurred using a member |
---|
| 345 | without a base class.) |
---|
| 346 | </ul> |
---|
| 347 | Working around this in the implementation of the library for this compiler |
---|
| 348 | entailed a ridiculous amount of effort. Even so, the effort wasn't entirely succesful. |
---|
| 349 | With this compiler, this message will still appear under the following conditions: |
---|
| 350 | <ul> |
---|
| 351 | <li>When serializing a class with multiple base classes. This problem causes two |
---|
| 352 | failure in the test suite. I have been unable to divise a way to work around this. |
---|
| 353 | <li>Using more than one kind of archive in the same code module. This should be easy |
---|
| 354 | to work around in practice. |
---|
| 355 | </ul> |
---|
| 356 | <li>Code modules exceeding some undetermined size that use the library will fail with |
---|
| 357 | <i>fatal error C1204: compiler limit : internal structure overflow</i>. This can be addressed |
---|
| 358 | by dividing the module into smaller ones. |
---|
| 359 | </ul> |
---|
| 360 | <h4><a name="borland">Borland 5.64 and 5.51</a></h4> |
---|
| 361 | <ul> |
---|
| 362 | <li><code style="white-space: normal">enum</code> data members cannot be serialized. |
---|
| 363 | Conversion to/from integers will work around the problem. |
---|
| 364 | <li>If class serialize functions are not accessable either by making them public or by |
---|
| 365 | including <code style="white-space: normal">friend</code> declarations as described in |
---|
| 366 | <a href="serialization.html#member">Class Serialization - Member Function</a>, the |
---|
| 367 | will compile but fail at runtime. |
---|
| 368 | <li>Tests using custom extended type which doesn't use rtti fails. (5.64 only !). |
---|
| 369 | <li>Tests built in release mode fail. This seems to be an issue with the boost test system |
---|
| 370 | with this compiler. |
---|
| 371 | <li>XML serialization only works with version 1.6x of spirit. In order to build |
---|
| 372 | and use this library with this compiler, one must use version 1.6x rather than the |
---|
| 373 | latest version shipped with boost. See <a href="release.html">Release Notes</a>. |
---|
| 374 | </ul> |
---|
| 375 | <h4><a name="comeau">Comeau 4.3.3</a></h4> |
---|
| 376 | <ul> |
---|
| 377 | <li>This compiler fails to make a DLL with export under windows. |
---|
| 378 | <li>The associated library - libcomo fails when using a codecvt facet. |
---|
| 379 | This generates a failure with all wide character archives. |
---|
| 380 | <li>the test_set fails by going into an infinite memory leak. |
---|
| 381 | </ul> |
---|
| 382 | |
---|
| 383 | <h4><a name="codewarrior9">Code Warrior 9.x</a></h4> |
---|
| 384 | <ul> |
---|
| 385 | <li>Some tests and demos demos fail - still under investigation |
---|
| 386 | </ul> |
---|
| 387 | |
---|
| 388 | <h4><a name="codewarrior">Code Warrior 8.3</a></h4> |
---|
| 389 | all the above issues for Code Warrior 9.x plus: |
---|
| 390 | <ul> |
---|
| 391 | <li>This compiler only supports templated streams with the static library version. |
---|
| 392 | <li>The above inhibits the build of DLL versions of the library. |
---|
| 393 | <li>Some demos fail - still under investigation |
---|
| 394 | </ul> |
---|
| 395 | |
---|
| 396 | <h4><a name="tru64">TRU64</a></h4> |
---|
| 397 | All tests and demos pass except for test_variant. Boost Variant doesn't function |
---|
| 398 | wih this compiler |
---|
| 399 | |
---|
| 400 | <h4><a name="dinkumware">Dinkumware Library</a></h4> |
---|
| 401 | Several compilers, including Visual C++ 6.0, use an older dinkumware library. |
---|
| 402 | These platforms have several issues: |
---|
| 403 | <ul> |
---|
| 404 | <li>The dinkumware library shipped with this compiler does not change the locale facet |
---|
| 405 | of an i/o stream unless the <code style="white-space: normal">imbue</code> function is called before the the |
---|
| 406 | stream is opened. In order to use this library with this environment to generate UTF-8 |
---|
| 407 | files, one cannot depend on the "automatic" setting of locale that archives implement. The |
---|
| 408 | stream locale must be set explicitly on the stream before an archive is opened on it. The |
---|
| 409 | archive should be opened with the <code style="white-space: normal">no_codecvt</code> flag. Note this problem will |
---|
| 410 | occur on all compilers shipped with this library. |
---|
| 411 | <li>Other issues have been worked around in the file. |
---|
| 412 | <a href="../../../boost/archive/dinkumware.hpp" target="dinkumware_hpp">dinkumware.hpp</a> |
---|
| 413 | </ul> |
---|
| 414 | |
---|
| 415 | <h4><a name="stlport">STLPort 4.5.3</a></h4> |
---|
| 416 | <ul> |
---|
| 417 | <li>when built to use dynamic linking versions of C++ runtime code (<runtime-link>dynamic) |
---|
| 418 | all tests fail to link. This is due to a missing symbol in the stlport library related |
---|
| 419 | to custom codecvt facets. |
---|
| 420 | <li>the test_set fails to run correctly. It seems the hashed set interator doesn't |
---|
| 421 | implement the ++ operator correctly. This causes the test to fail by consuming all available |
---|
| 422 | memory. Given this, this test is commented out. |
---|
| 423 | </ul> |
---|
| 424 | |
---|
| 425 | <hr> |
---|
| 426 | <p>Revised 1 November, 2004 |
---|
| 427 | <p><i>© Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004. |
---|
| 428 | Distributed under the Boost Software License, Version 1.0. (See |
---|
| 429 | accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
---|
| 430 | </i></p> |
---|
| 431 | </body> |
---|
| 432 | </html> |
---|