C++26: Trivial infinite loops are no longer undefined behaviour
cppdashboard.dev/r/2026/09/cpp26-trivial-infinite-loops-are-no-longer-undefined-behavioThis article discusses the changes in C++26 regarding trivial infinite loops and their treatment as defined behavior. It provides insights into the implications of this change for C++ developers.
From the article
Let’s start with a question! Is this program well-defined?
1 2 3 4 int main () { while ( true ) ; } If you said yes, you’d be wrong — at least before C++26. A while (true); loop with no side effects used to be undefined behaviour . Compilers were free to assume it terminates, and some — Clang in particular — would optimize it away entirely, with spectacular consequences :
1 2 3 4 5 6 7 8 9 10 11 // https://godbolt.org/z/WYMxxeW1T #include <iostream> int main () { while ( true ) ; } void unreachable () { std :: cout << "Hello world!" << std :: endl ; } In Clang, this prints “Hello world!” . The compiler removes the infinite loop, main falls through, and the linker-placed unreachable() function executes. This is not a compiler bug — it’s just UB, still better than nasal demons.
Share this resource