Вопрос:
Стандарты С++ различают встроенные типы и типы struct или class. Для последнего разрешено перегружать операторы, такие как +, *= или &, но не для встроенных типов, когда соответствующие операторы предоставляются языком. AFAIK, типы SSE/AVX не упоминаются в стандарте (но, пожалуйста, исправьте меня), поэтому вы должны иметь возможность объявлять этих операторов. GCC не позволяет этого, но ICC делает. Какой из них правильный?
Я действительно хотел бы иметь побитовые операции (например, &=), но, досадно, GCC не предоставляет их (для __m128) и не позволяет объявить их.
Лучший ответ:
Все верно. Эти типы являются расширениями для С++, а не встроенными (почти ничего не встроенное в С++ начинается с подчеркивания). Поскольку они являются расширениями, реализация может налагать любые ограничения на них, которые она хочет.
Ответ №1
Они не встроены. С++ не зависит от конкретных особенностей архитектуры HW.