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