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

            Bug ID: 122668
           Summary: error: 'class TestClass<T>' has no member named
                    'member_function' [-Wtemplate-body]
           Product: gcc
           Version: 15.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pingou at pingoured dot fr
  Target Milestone: ---

Running the following code on gcc15 fails while it was working with previous
versions.

It feels like a bug in gcc.

This is the code:

template <class T>
class TestClass {
  public:
    friend constexpr T friend_function(TestClass& test, TestClass& arg)
noexcept(noexcept(test.member_function(arg))) {
        return test.member_function(arg);
    }

    T member_function(TestClass& test) const {
        return 3;
    }
};

template <class T>
class TestClass2 {
  public:
    T member_function(TestClass2& test) const {
        return 3;
    }

    friend constexpr T friend_function(TestClass2& test, TestClass2& arg)
noexcept(noexcept(test.member_function(arg))) {
        return test.member_function(arg);
    }
};

int main() {
    TestClass<int> test{};
    TestClass<int> arg{};
    return friend_function(test, arg);

    TestClass2<int> test2{};
    TestClass2<int> arg2{};
    return friend_function(test2, arg2);
}


This is the output:
<source>:4:96: error: 'class TestClass<T>' has no member named
'member_function' [-Wtemplate-body]
    4 |     friend constexpr T friend_function(TestClass& test, TestClass& arg)
noexcept(noexcept(test.member_function(arg))) {
      |                                                                        
                       ^~~~~~~~~~~~~~~
Compiler returned: 1


This was reproduced in godbolt at: https://godbolt.org/z/dcz6PWYfe

Reply via email to