
At least for VC7.1 compiler int a, b; cout<<typeid(sizeof(a)/(a - b)).name()<<endl; prints "unsingned int" and issues no warnings about int -> size_t conversion. Thus I still wonder if usage of int type in
int count = sizeof(t) / ( static_cast<const char *>(static_cast<const void
*>(&t[1]))
dictated by consideration for some other C++ compiler. VC7.1 does issue a warning warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data for that code. I would suggest to consider either change type of variable count from int to size_t or disable C4267 for this piece of code for MS compilers. --- Ovanes Markarian <om_boost@keywallet.com> wrote:
On Wed, April 11, 2007 17:51, Oleg V. Zhylin wrote:
Hi,
Is there a reason to use type int in the code at line 487 in oserializer.hpp?
int count = sizeof(t) / ( static_cast<const char *>(static_cast<const void *>(&t[1]))
- static_cast<const char *>(static_cast<const void *>(&t[0]))
C++ standard draft states in section 5.3.3 [expr.sizeof]
The result is a constant of an implementation-defined type which is the same type as that which is named size_t in the standard header <cstddef>(18.1).
I assume otherwise you will get a warning, that a sign can be lost through the assignment. The problem here is that expression (type* - type*) results not in an unsigned type (size_t) but a signed difference type. If you divide unsigned value through a signed value you get a signed value. And then you would (according to your suggestion) assign it to an unsigned value => warning.
With Kind Regards,
Ovanes Markarian
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
WBR Oleg V. Zhylin ovz@yahoo.com ____________________________________________________________________________________ Finding fabulous fares is fun. Let Yahoo! FareChase search your favorite travel sites to find flight and hotel bargains. http://farechase.yahoo.com/promo-generic-14795097