Title
Is call of static member function through null pointer undefined?
Status
nad
Section
11.4.9.2 [class.static.mfct]
Submitter
Jason Merrill

Created on 2001-10-07.00:00:00 last changed 5 months ago

Messages

Date: 2024-06-15.00:00:00

Additional notes (June, 2024)

Issue 2823 represents the current language rules; the example has undefined behavior.

Date: 2003-10-15.00:00:00

Rationale (October 2003):

We agreed the example should be allowed. p->f() is rewritten as (*p).f() according to 7.6.1.5 [expr.ref]. *p is not an error when p is null unless the lvalue is converted to an rvalue (7.3.2 [conv.lval]), which it isn't here.

Date: 2022-11-20.07:54:16

Another instance to consider is that of invoking a member function from a null pointer:

  struct A { void f () { } };
  int main ()
  {
    A* ap = 0;
    ap->f ();
  }

Which is explicitly noted as undefined in 11.4.3 [class.mfct.non.static], even though one could argue that since f() is empty, there is no lvalue->rvalue conversion.

If f is static, however, there seems to be no such rule, and the call is only undefined if the dereference implicit in the -> operator is undefined. IMO it should be.

Incidentally, another thing that ought to be cleaned up is the inconsistent use of "indirection" and "dereference". We should pick one. (This terminology issue has been broken out as issue 342.)

This is related to issue 232.

History
Date User Action Args
2024-06-22 07:40:17adminsetmessages: + msg7747
2003-11-15 00:00:00adminsetmessages: + msg949
2003-11-15 00:00:00adminsetstatus: open -> nad
2001-10-07 00:00:00admincreate