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

            Bug ID: 77984
           Summary: Invalid warning on templated operator= with -Weffc++
           Product: gcc
           Version: 6.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: victor at paleologue dot fr
  Target Milestone: ---

Created attachment 39810
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=39810&action=edit
Stand-alone C++ code reproducing a false warning

In the code attached, Thing::operator= is defined as following:

struct Thing
{
  template<typename T>
  Thing& operator=(const T&)
  {
    return *this;
  }
};

Compiling it, I get a warning that does not seem legitimate:

$ g++ false_warning.cpp -Weffc++
false_warning.cpp: In member function ‘Thing& Thing::operator=(const T&)’:
false_warning.cpp:6:13: warning: ‘operator=’ should return a reference to
‘*this’ [-Weffc++]
     return *this;
             ^~~~

My version of gcc:

$ g++ --version
g++ (GCC) 6.2.1 20160916 (Red Hat 6.2.1-2)
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Reply via email to