On Thu, 18 Jul 2024, Richard Biener wrote: > > If both b and c are scalars and the type of true?b:c has the same size > > as the element type of a, then b and c are converted to a vector type > > whose elements have this type and with the same number of elements as a. > > > > (in https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html ) > > But sizeof(typeof(true?‘a‘:‘b‘)) is four nevertheless the C++ frontend > produces vectors of char.
It is 1 in C++; in C it is four because 'a' has type int, not char. (also, in C op2 and op3 of a ternary operator always have integer promotions applied, but for vector selection we should use unpromoted types) > > I think we require that sizes match because that's natural considering > > how it is lowered (bitwise blending of comparison mask with op2/op3). > > It works naturally for mixed sizes with for example AVX512 and better lowering > could be implemented for SSE. Yeah, I'm just saying it makes sense to me from a historical perspective. I won't object if in C vector c?a:b is more useful than in C++. Alexander