¿Cuándo invocar una función miembro en una instancia nula da como resultado un comportamiento indefinido?

Considere el siguiente código:

#include <iostream>

struct foo
{
    // (a):
    void bar() { std::cout << "gman was here" << std::endl; }

    // (b):
    void baz() { x = 5; }

    int x;
};

int main()
{
    foo* f = 0;

    f->bar(); // (a)
    f->baz(); // (b)
}

Esperamos(b) chocar, porque no hay miembro correspondientex para el puntero nulo. En la práctica,(a) no se bloquea porque elthis puntero nunca se utiliza.

Porque(b) desreferencia elthis puntero(*this).x = 5;) ythis es nulo, el programa entra en un comportamiento indefinido, ya que siempre se dice que la anulación de referencia es un comportamiento indefinido.

Hace(a) resultar en un comportamiento indefinido? ¿Qué pasa si ambas funciones (yx) son estáticos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta