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

--- Comment #1 from ricilake at gmail dot com ---
Thanks to Johannes Schaub-litb (via SO), the problem appears to be at around
line 16781 of cp/parser.c:

      /* There is no valid C++ program where a non-template type is
         followed by a "<".  That usually indicates that the user thought
         that the type was a template.  */
      cp_parser_check_for_invalid_template_id (parser, type, none_type,
                                               token->location);

I believe this comment (and the subsequent call to
cp_parser_check_for_invalid_template_id) is incorrect; the above program is
valid.

As Johannes points out, there are other valid C++ programs in which a less than
sign can follow a non-template type, such as the following, which also triggers
the same error: (condensed from Johannes'
http://coliru.stacked-crooked.com/a/f35c1aa5b3f9832d)

    struct A { operator A(); };
    void operator<(A (A::*)(), A);
    int main() { &A::operator A < A(); }

Reply via email to