Skip to content

Latest commit

 

History

History
91 lines (75 loc) · 1.85 KB

c26450.md

File metadata and controls

91 lines (75 loc) · 1.85 KB
description title keywords ms.date ms.topic f1_keywords helpviewer_keywords dev_langs
Learn more about: Arithmetic overflow: '%operator%' operation causes overflow at compile time. Use a wider type to store the operands
C26450
C26450
01/08/2017
reference
C26450
C26450
C++

Arithmetic overflow: '%operator%' operation causes overflow at compile time. Use a wider type to store the operands

This warning indicates that an arithmetic operation was provably lossy at compile time. This can be asserted when the operands are all compile-time constants. Currently, we check left shift, multiplication, addition, and subtraction operations for such overflows.

Note: C4307 is a similar check in the Microsoft C++ compiler.

Example 1

int multiply()
{
    const int a = INT_MAX;
    const int b = 2;
    int c = a * b; // C26450 reported here
    return c;
}

To correct this warning, use the following code.

long long multiply()
{
    const int a = INT_MAX;
    const int b = 2;
    long long c = (long long)a * b; // OK
    return c;
}

Example 2

int add()
{
    const int a = INT_MAX;
    const int b = 2;
    int c = a + b; // C26450 reported here
    return c;
}

To correct this warning, use the following code:

long long add()
{
    const int a = INT_MAX;
    const int b = 2;
    long long c = (long long)a + b; // OK
    return c;
}

Example 3

int subtract()
{
    const int a = -INT_MAX;
    const int b = 2;
    int c = a - b; // C26450 reported here
    return c;
}

To correct this warning, use the following code.

long long subtract()
{
    const int a = -INT_MAX;
    const int b = 2;
    long long c = (long long)a - b; // OK
    return c;
}

See also

ES.103: Don't overflow