From mboxrd@z Thu Jan 1 00:00:00 1970 From: Don Mies To: gcc-bugs@gcc.gnu.org, bug-gcc@gnu.org, gcc@gcc.gnu.org Subject: Casting Overloaded Function Pointer Problem...Repost... Date: Mon, 18 Sep 2000 11:06:00 -0000 Message-id: <39C6596B.5C12890@bluekite.com> X-SW-Source: 2000-09/msg00409.html   Gentlemen, This is a reposting of an earlier request.  I received no responses that helped in resolving my problem so I will try posting the query again... I have run into a problem trying to use the g++ compiler on a Sun Solaris 7 system. I've been trying to compile a version of the Microsoft MFC library with the g++ compiler and have run into a problem that I don't know how to resolve. Here is a highly condensed test file that illustrates the problem. --------------------------------------------      1      2  class CCmdTarget;      3  class CWnd;      4  class CRecordView;      5      6  typedef int (CCmdTarget::*PMSG)(int);      7      8  class CCmdTarget {};      9     10     11  class CWnd : public CCmdTarget     12  {     13    public:     14      int OnMove (int x, int y);     15  };     16     17     18  class CRecordView : public CWnd     19  {     20    public:     21      int OnMove (int);     22    protected:     23      void OnMove (int cx, int cy);     24    private:     25      static const PMSG _messageEntries[];     26  };     27     28     29  ////////////////////////////////////////////////////////////     30     31  const PMSG CRecordView::_messageEntries[] =     32  {     33      (PMSG)&CRecordView::OnMove     34  };   ---------------------------------------- If I compile the above with the Sun CC compiler, I get no complaints or warnings.  When I compile it with g++ (gcc version 2.95.2 19991024 (release)) I get the following error messages:     t.C:34: no matches converting function `OnMove' to type `int (CCmdTarget::*)(int)'     t.C:21: candidates are: int CRecordView::OnMove(int)     t.C:23:                 void CRecordView::OnMove(int, int) If I comment out the overloaded function declaration at line 23, it will compile with no errors. The compiler appears to be ignoring the cast operator at line 33 when it determines the function signature. I received one response to my initial posting with the following information: > Your code is essentially asking GCC to convert the pointer > to the member function into a p-to-m-f of the base class. > If I'm interpreting this correctly, according to the C++ > Standard, section 13.4, this is not allowed: > > [Note: there are no standard conversions (clause 4) of one > pointer-to-function type into another. In particular, even > if B is a public base of D, we have > >       D* f(); >       B* (*p1)() = &f; // error >       void g(D*); >       void (*p2)(B*) = &g; // error > > -end note] > > Therefore, I think GCC may be right in complaining about > this code. However, I don't believe the above interpretation is incorrect as my example program above is doing an explicit cast and not a standard cast as the above response contends.  In addition, if I comment out line 23 to remove the overloading function declaration, it will compile with no errors and the casting operation is still in effect and unchanged. Sections 5.1.10.6, 5.2.10.9, and 5.4.5 of the C++ Standard seem to indicate that the above construct should be legal but the g++ compiler appears to disagree. Is there a way to fix this without making major changes to the source files (I don't understand  the MFC library well enough to make changes to it)? Thank you,   Don Mies --  This e-mail contains information intended only for the use of the individual or entity named above.  If the reader of this e-mail is not the intended recipient or the employee or agent responsible for delivering it to the intended recipient, any dissemination, publication or copy of this e-mail is strictly prohibited.  If you have received this e-mail in error, please immediately notify the sender. Thank you.   begin:vcard n:Mies;Don tel;fax:(714) 375-2737 tel;work:(714) 843-6050 x-mozilla-html:FALSE url: http://www.bluekite.com org:BlueKite.com, Inc.;Unix Development version:2.1 email;internet:dmies@bluekite.com adr;quoted-printable:;;17011 Beach Blvd, Suite 1230=0D=0A;Huntington Beach;CA;92647;U.S.A. x-mozilla-cpt:;-24136 fn:Don Mies end:vcard