次のコードを検討してください。
int l;
int k;
for (int i=0; i < 2; ++i)
{
int j;
if (i == 0) l = j;
if (i == 1) k = j;
}
assert (l == k);
主張は成り立つか?興味深い点は、初期化されていない変数が異なる反復で異なる値を取ることができるかどうかです。
LLVMをいじってみると、アサーションが実際に保持されていることが示唆されます.これは実際に標準によって保証されているのでしょうか、それとも未定義であり、LLVMコンパイラが実装する方法で発生するのでしょうか?