On 10/30/2013 08:34 AM, Ondřej Bílka wrote:
>>
> The reasons of adding builtins is performance. Without that one can
> write a simple template to generically check overflows like
>
> template <class C> class overflow {
> public:
> C val;
> overflow <C> operator + (overflow <C> &y) {
> overflow <C> ret;
> if (val > 0 && y.val > 0 && val + y.val < val)
> throw std::overflow_error();
> /* ... */
> ret.val = val + y.val;
> return ret;
> }
> /* ... */
> };
How is that going to work? The compiler can simply eliminate this line:
if (val > 0 && y.val > 0 && val + y.val < val)
throw std::overflow_error();
because it knows that the guard is always false. I suppose it could be
compiled with -fwrapv.
Andrew.