[Bug c++/15684] Pointer to member function called on incomplete type should diag

leor at bdsoft dot com gcc-bugzilla@gcc.gnu.org
Fri May 28 17:01:00 GMT 2004


------- Additional Comments From leor at bdsoft dot com  2004-05-27 21:46 -------
> oh - here is the link again, hopefully without wrapping
> http://groups.google.com/groups?hl=en&lr=&ie=UTF-
8&c2coff=1&threadm=3ACC2828.45CA0D3C%40dresdner-bank.com&rnum=1&prev=/groups%
3Fq%3Dg:thl1416673164d%26dq%3D%26hl%3Den%26lr%3D%26ie%3DUTF-8%26c2coff%3D1%
26selm%3D3ACC2828.45CA0D3C%2540dresdner-bank.com

That worked. I'm confused by some things Kanze says in that article. First, 
there's this:

   The question was whether you can take a pointer to member function 
   on an incomplete class.  I don't think that the standard says
   anything about this directly.

But the way I read it, 5.5.3 is /very/ clear and direct. You can't do it.
Then there's this:

   More generally, the standard always specifies when an incomplete type 
   is illegal; using an incomplete type in a context which requires a
   complete type makes the program ill-formed, and requires a
   diagnostic.  Considering this, it is interesting that 5.5 makes no
   such restriction.  I interpret this to mean that you can also
   dereference the pointer without completing the type; the following
   is legal:

    class X ;

    void
    f( X* pc , void (X::*pmf)() )
    {
        (pc->*pmf)() ;
    }

Here again, the Standard says something must be a complete type (OK, the term 
actually used is "completely-defined", but I'm assuming that's the same thing), 
and Kanze is saying that the Standard "always specifies" when an incomplete 
type is illegal? As if saying something "must be completely-defined" is 
insufficient?

Kanze goes on to show the /exact/ situation we're talking about, but he seems 
to think the Standard sanctions it. Help me out here, I don't get it.
    -leor








-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15684



More information about the Gcc-bugs mailing list