https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85043

            Bug ID: 85043
           Summary: -Wuseless-cast false positive for temporary objects
           Product: gcc
           Version: 7.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: b...@michael-lossin.de
  Target Milestone: ---

> cat x.cc
#include <iostream>

struct A
{
    int value = 42;
    A & inc() { ++value; return *this; }
};

int main()
{
  {
    A a;
    std::cout << A(a).inc().value << ", ";
    std::cout << a.value << "\n";
  }
  {
    A a;
    std::cout << a.inc().value << ", ";
    std::cout << a.value << "\n";
  }
}

> g++ -Wuseless-cast -o x x.cc
x.cc: In function 'int main()':
x.cc:13:21: warning: useless cast to type 'A' [-Wuseless-cast]
     std::cout << A(a).inc().value << ", ";
                     ^

> ./x
43, 42
43, 43


Here, A(a) is not a cast but creates a temporary object which in turn is
modified. Removing the "useless cast" would alter the original object, so the
warning should not be shown in this case.

Reply via email to