Pretty straightforward. With -maltivec -Wunused-but-set-parameter, this works in C but emits a diagnostic in C++: #include <altivec.h> int f(vector int b) { return vec_extract(b, 0); } FWIW, the same problem happens if b is a local variable not a parameter, though of course it will emit an unused-but-set-variable diagnostic instead.