Do C++ signed types have modulo semantics?
Nathan Sidwell
nathan@codesourcery.com
Mon Jun 27 13:02:00 GMT 2005
Michael Veksler wrote:
> According to the (very) long discussion on VRP, signed char/short/int/etc
> do not have modulo semantic, they have an undefined behavior on overflow.
> However in <limits> defines numeric_limits<signed type>::is_modulo = true.
signed types are undefined on overflow. [5/5] and [3.9.1/2,3]
> 1. Is that a bug in <limits>, a bug in the standard, or is just C++
> different
> than C in this respect?
a bug in limits, probably
> 2. Maybe because overflow is undefined then is_modulo maybe
> considered "unspecified". I don't like this option, because it does not
> help
> generic programming.
it's also, I believe, wrong, in that some gcc optimizations will not preserve
such behaviour. (I guess this is the whole VRP conversation you mention.)
> 3. Do I understand what is_modulo stands for?
yes
> 4. What should be done (libstdc++ PR, C++ PR, DR, other)?
18.2.1.2/57 claims is_modulo is true 'for signed types on most machines'. Such
an assertion is false when optimizations rely the undefinedness of signed
overflow. A DR should probably be filed (maybe one is, I'm not at all familiar
with library DRs).
nathan
--
Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC
nathan@codesourcery.com :: http://www.planetfall.pwp.blueyonder.co.uk
More information about the Gcc
mailing list