Em que ponto a desreferenciação do ponteiro nulo se torna um comportamento indefinid

Se eu realmente não acessar o "objeto" não referenciado, a referência nula ainda não está definid

int* p = 0;
int& r = *p;    // undefined?
int* q = &*p;   // undefined?

Um exemplo um pouco mais prático: posso desreferenciar o ponteiro nulo para distinguir entre sobrecarga

void foo(Bar&);
void foo(Baz&);

foo(*(Bar*)0);  // undefined?

Ok, os exemplos de referência são definitivamente um comportamento indefinido de acordo com o padrão:

uma referência nula não pode existir em um programa bem definido, porque a única maneira de criar essa referência seria vinculá-la ao "objeto" obtido desreferenciando um ponteiro nulo,que causa um comportamento indefinido.

Infelizmente, a parte enfatizada é ambígua. É oobrigatóri parte que causa comportamento indefinido ou é o dereferencing parte suficiente?

questionAnswers(3)

yourAnswerToTheQuestion