[Bug c++/93807] -std=c++2a allows to omit out-of-class declaration in template class

mpolacek at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Apr 21 22:05:56 GMT 2020


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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |ASSIGNED
           Keywords|accepts-invalid             |
                 CC|                            |mpolacek at gcc dot gnu.org
   Last reconfirmed|                            |2020-04-21
           Assignee|unassigned at gcc dot gnu.org      |mpolacek at gcc dot gnu.org

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
I think this is valid code: C++20 [temp.names]/2 says "A name is also
considered to refer to a template if it is an unqualified-id followed by a <
and name lookup either finds one or more functions or finds nothing." so when
we're parsing
constexpr friend bool operator==<T>(T lhs, const Foo& rhs);
we treat "operator==" as a template name, because name lookup of "operator=="
found nothing and we have an operator-function-id, which is an unqualified-id. 
So the declaration isn't needed to treat "operator==<T>" as a template-id.

I'll add the test.


More information about the Gcc-bugs mailing list