C++ 標準では、条件式に関する規則に 1 つの変更が加えられています。この違いは、以下のような式にのみ影響を与えます。
e ? a : b = c
問題になるのは、グループ化のための括弧がない状態で、コロンの後で代入が行われる場合です。
4.2 コンパイラでは、従来の C++ の規則が使用されており、上記の式は、以下のように書かれているかのように扱われました。
(e ? a : b) = c
つまり、c の値は、e の値に従って a または b のいずれかに代入されます。
5.0 コンパイラでは、互換モードと標準モードのどちらでも、新しい C++ の規則が使用され、上記の式は以下のように書かれているかのように扱われます。
e ? a : (b = c)
つまり、c は e が偽の場合にだけ b に代入されます。
解決策: 必ず括弧を使用して、自分の意図を正確に指示してください。括弧を使用すると、どのコンパイラでコンパイルしたときでも、コードは同じ意味を持つようになります。