Разыменование указателя NULL на ссылку, которая не используется; Это также "Undefined Поведение"?

В большом проекте, скомпилированном с использованием последнего g++, последовательно наблюдается поведение в "--- > ":

void somewhere ()
{
  T* pt = find(x); // returns `nullptr` for `x`
  foo(*pt);
}

void foo (T& t)  // many times `t` is created from `pt = nullptr`
{
  if(condition)
    t.set(0);  // ---> But app crashes, only if this is touched
}

Значит, find(x) всегда возвращает nullptr в pt. Но приложение не сбой, если только condition не является истинным. Предположим, если condition никогда не будет истинным, если pt было nullptr, приложение все еще находится в состоянии UB?

Другими словами, как указано в вопросе:
Разыменовывает NULL-указатель в ссылку, к которой никогда не обращаются для чтения/записи, а также undefined поведение?

Поскольку нулевой указатель сам по себе не является UB, а доступен только ему. Точно так же ссылка, полученная от такого указателя (аналогично "нулевая ссылка" ), не должна действовать одинаково!

Ответы