Рассмотрим эти две функции:
int f1()
{
alignas(int) char buf[sizeof(int)] = {};
return *reinterpret_cast<int*>(buf);
}
int f2()
{
alignas(int) char buf[sizeof(int)] = {};
char* ptr = buf;
return *reinterpret_cast<int*>(ptr);
}
GCC предупреждает, что первое нарушение правил строгого сглаживания. Но второй - ОК.
Кланг принимает оба без жалобы.
Является ли предупреждение законным?