[C++]Nullポインタ経由のstaticメンバへのアクセスは許されている。らしい。

nullポインタに関するメモ。

あるクラスのポインタを経由してそのメンバにアクセスしたい場合、通常はそのポインタがnullポインタであってはならない。しかしnullポインタであったり、有効なアドレスでなかったりした場合にも、staticメンバへのアクセスに利用することはできる。

struct Test
{
    void func() {}
    static void static_func() {}
};

Test* p = nullptr;
//以下はUB。
p->func();

//以下はwell-defined。
*p;//pの指すnon-staticメンバにアクセスしなければ問題ない。
p->static_func();//*p; Test::static_func();と同等なので問題ない。
参考

https://stackoverflow.com/questions/63331787/why-is-dereferencing-of-nullptr-while-using-a-static-method-not-undefined-behavi
https://dev.to/ivan_kuten/null-pointers-in-c-what-you-can-and-can-t-do-25ic
https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#315