VC++2013 の最適化バグ?
for(const Obj* p_obj : get_objects()) { float t; if(p_obj->hoge(&t)) { if(t < t_min) t_min = t; } }
みたいなことやってたら、1個前のループで更新したtの値がそのまま残っててt_minとの比較が全部falseになってた。hoge()は渡されたtより小さい結果がでたらtを更新してtrueを返す。
float t = 0.f; に書き換えて修正完了。
追記
@hal1932 未初期化の t の値(不定値)を読み出したんですね。未定義動作ですが、実装上はふつうに同じ場所を再利用するし、初回のイテレーションでも変な値が入っているはず。このくらいだと最適化 OFF でも同じです。
— あすみち (@asm_ichi) 2014, 6月 18
たしかに、言われてみればふつうに納得できる範囲内だ。