>807
それ単に三項演算子の使い方を間違えてるだけじゃん

int a = 1 ? f() : 2;

だと、aに f()の結果(つまりvoid)を入れることになるから、エラー吐くの当たり前。
int型変数にvoid入れようとしてるんだよ。ところが

return 1 ? f() : 2;

はmain関数の戻り値にf()の結果を入れようとしてるからエラーにならない。
なんかVCはmain関数の場合はvoidを戻り値にしてもエラーにならんみたいだ。
試しに return f(); にしてもエラーにならん筈。