http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59931
Bug ID: 59931
Summary: Wrong wording of diagnostic about imaginary "member
function type"
Product: gcc
Version: 4.8.2
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: frankhb1989 at gmail dot com
Case:
class C
{
public:
void f()
{
void (C::*pf)() = f;
}
};
int main(){}
a.cc: In member function 'void C::f()':
a.cc:6:21: error: cannot convert 'C::f' from type 'void (C::)()' to type 'void
(C::*)()'
void (C::*pf)() = f;
^
In short, there is no type like 'void (C::)()' in modern C++, at least in ISO
C++. The member 'C::f' here should have type 'void ()'(if it makes sense), just
as a non-member function type. The reason should be determined by the
difference between pointer types and pointer to member types, and no conversion
like function-to-pointer takes effects in it.
P.S.
Clang++ 3.0 complains about this as:
"error: cannot initialize a variable of type 'void (C::*)()' with an rvalue of
type '<bound member function type>'".
And Clang++ 3.2's:
"error: cannot initialize a variable of type 'void (C::*)()' with an rvalue of
type 'void'".