On Wednesday, November 27, 2002, at 06:05 PM, Kevin Lynch wrote:
Michael Walter wrote:I don't remember seeing this pointed out, so forgive me if I just missed it or am just stating the obvious, but:If a library user wants his archives to be portable he has to use int8_t, int16_t, etc..
These types are technically NOT portable, in two ways:
1) They are not defined by ISO C++ ... although they are required by POSIX 1g, and are optional types in ISO C, C++ compilers are not required to support them.
We seem to support them in boost, thus that's no problem.
Agreed. It would just make the task of implementing a portable binary serialization easier, since we know the width of the types. However, we can also do the internal (private) implementation based on these types and dispatch from operator<<(int) to the appropriate function for serializing an integer with sizeof(int) bytes.
2) Although both POSIX and C99 define them to be 2's complement integers with the appropriate number of bits, neither standard sets a requirement on byte ordering within the multibyte types. Thus, even if a platform supports them (say, the BSD family), the binary form of the integers is not portable.
So, while use of them may lead to a MORE portable C++ interface, they won't directly lead to a portable binary serialization format (although you can clearly fix that problem in platform specific byte reordering code).
In any case the library user should be reminded that short, int and long are never portable, but that by using int*_t and appropriate archive formats one can achieve portable serialization.
Matthias
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost