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?