考虑这两个函数:
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
数组,而glvalue的类型是int
; https://timsong-cpp.github.io/cppwp/basic.lval#8中没有涵盖这种情况。 - T.C.