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

            Bug ID: 120130
           Summary: Cannot declare function template as friend in the
                    presence of same named member function
           Product: gcc
           Version: 15.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fchelnokov at gmail dot com
  Target Milestone: ---

This program:
```
template<typename T>
struct Foo;

template<typename T>
void g(const Foo<T>&) {}

template<typename T>
struct Foo {
    Foo g() { return *this; }
    friend void g<>(const Foo<T>&);
};

int main() {
    Foo<int>{}.g();
    g(Foo<int>{});
}
```
is accepted by Clang, but GCC rejects it with
> error: template-id 'g<>' for 'void g(const Foo<int>&)' does not match any 
> template declaration
Online demo: https://gcc.godbolt.org/z/fE9Eeoabz

Note that swapping the lines inside struct Foo makes GCC happy as well.

Found in https://stackoverflow.com/q/79607696/7325599

Reply via email to