Я не думаю, что стандарт говорит, что поведение не определено, он просто говорит, что цикл, который не имеет побочных эффектов, может в конечном итоге завершиться.
Итак:
int main() {
while (true) {}
}
Может завершаться или зацикливаться навсегда.
void foo() {
foo();
}
int main() {
foo();
}
Может также завершаться, зацикливаться вечно или, возможно, не хватает места в стеке (если компилятор не реализует хвостовую рекурсию).
Не знаюдумаю, что любой имеет какое-либо право на что-либо, кроме перечисленного, поэтому я не думаю, что поведение полностью "неопределенное".