Возможный дубликат:
Когда вызов функции-члена для нулевого экземпляра приводит к неопределенному поведению?
Я только что прочитал этот вопрос с отличным ответом: Когда вызов функции-члена для нулевого экземпляра приводит к неопределенному поведению?
По сути, является ли следующий код неопределенным поведением?
struct foo { static void bar() { } };
foo *p = nullptr;
p->bar();
Согласно связанному посту, это можно интерпретировать по-разному, один из которых UB, а другой нет.
В C ++ 0x, начиная с n3126, неопределенность сохраняется
Это по-прежнему в финальной версии C ++ 11?
Вопрос, который вы связали, ясно показывает, что в строгой или слабой интерпретации стандарта код, который вы показываете, является неопределенным поведением. Неоднозначность (может) существует только для статических функций (и ваш вопрос относится именно к нестатическим функциям).
РЕДАКТИРОВАТЬ: неопределенность все еще остается в N3337
от 2012-01-16, но у меня нет копии окончательного стандарта. Основываясь на комментариях к этой проблеме, похоже, что решение по вопросу 232 так и не вошло в стандарт, очевидно, потому что формулировка была слишком сильной, чтобы сделать ее концепцией времени компиляции, а не неопределенным поведением, как предполагалось.
Других решений пока нет …