Рассмотрим это:
int main(int, char **) {
int variable = 21;
int array[1] = {21};
using ArrayOf1Int = int[1];
(*reinterpret_cast<ArrayOf1Int *>(&variable))[0] = 42;
*reinterpret_cast<int *>(&array) = 42;
return 0;
}
Я только нарушил правило строгого псевдонимов?
Или, как в этом комментарии, это привело меня к этому вопросу: Является ли переменная массивом размера 1?
Обратите внимание, что я отметил это как вопрос о языке-адвокате. Таким образом, меня не интересует -fno-strict-aliasing
или специфическое поведение компилятора, но вместо этого в том, что сказано в стандарте. Также я думаю, было бы интересно узнать, как и как это изменилось между версиями С++ 03, С++ 11, С++ 14 и более поздними версиями.