I just read this question with an excellent answer: When does invoking a member function on a null instance result in undefined behavior?
基本上,以下代码是未定义的行为吗?
struct foo { static void bar() { } };
foo *p = nullptr;
p->bar();
最佳答案
您链接的问题清楚地表明,无论是对标准的严格解释还是对标准的弱解释,显示的代码都是未定义的行为。 (可能)仅对于静态函数存在歧义(并且您的问题专门针对非静态函数)。
编辑:歧义仍然保留在2012年1月16日的N3337
中,但我没有最终标准的副本。根据问题中的评论,看起来问题232的解决方案从未使它成为标准,这显然是因为措辞过于强硬,无法使其成为编译时概念,而不是预期的未定义行为。