C++26: Trivial infinite loops are no longer undefined behaviour
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() {
st...
Read more at sandordargo.com