条件演算式の型
C++では、第2項と第3項の型が同じで共に左辺値であるなら条件演算式は、左辺値であることは、比較的よく知られていると思うが、
第2項と第3項が共に配列型 又は 関数型である場合、ポインタ型への変換は行われないのね。
完全に規格を見落としていた。
早速、 実験
#include <stdio.h> int foo(void); int bar(void); int main() { int a[10],b[10]; printf("%u\n", sizeof(1?a:b)); // C++ではsizeof(int[10])、Cではsizeof(int*)のはず printf("%u\n", sizeof(1?foo:bar)); // C++ではコンパイルエラー、Cではsizeof(int(*)(void))のはず return 0; }
GCCでは予想どおりだったが、VCではC言語でも関数からポインタへの変換が行われていないっぽい。
BCCはC++とCの結果が同じだった(だめじゃん)。