https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88698
--- Comment #5 from Devin Hussey <husseydevin at gmail dot com> --- Well, if we are aiming for strict compliance, might as well throw out every GCC extension in existence (including vector extensions), those aren't strictly compliant to the C/C++ standard. /s The whole point of extensions are to be an extension that violates the standard. #include <arm_neon.h> uint64x2_t mult(uint64x2_t top, uint64x2_t bot) { return top * bot; } I am breaking two rules here: 1. Using operator overloads, which are not part of the standard. 2. Implying a nonexistent instruction, as there is no vmul.i64. (it is scalarized at the moment, but I explained in bug 88510 that there are better options) Clang even allows this: #include <arm_neon.h> uint32x4_t mult(uint16x8_t top, uint32x4_t bot) { return top * bot; } In which it will reinterpret all to the widest lane type.