At least for VC7.1 compiler
int a, b;
cout<
int count = sizeof(t) / ( static_cast
(static_cast *>(&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
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
(static_cast (&t[1])) - static_cast
(static_cast (&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