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