Рассмотрим эти две функции:
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 предупреждает, что первый нарушает строгие правила псевдонимов. А вот второй нормально.
Clang принимает оба без жалоб.
Правомерно ли предупреждение?
char
, либо массивchar
s, а glvalue имеет типint
; ничего в timsong-cpp.github.io/cppwp/basic.lval#8 покрывает этот случай. - person T.C.   schedule 23.12.2016