左辺で三項演算

C++三項演算子を左辺で使った場合、gccでコンパイルすると妙な結果になることを発見した。gccのバージョンは3.4.2でmingw版。試したコードは以下の通り。

#include <iostream>

int main(void) {
  int a(1), b(2);
  (true? a: b)=3;
  std::cout<<a<<","<<b<<std::endl;

  int c(1), d(2);
  (c<d? c: d)=3;
  std::cout<<c<<","<<d<<std::endl;

  return 0;
}

ここで期待する結果はもちろんこうだ。

3,2
3,2

実際、Borland C++では期待通りの結果を出力する。しかしgccだとどうなるか…。

3,2
1,2

ナニコレ?
試したコードの中には何か未定義なはずの挙動に期待している部分があるだろうか?
Document ID: 88d00eac221f679bd40041b791a27764