10
考虑这两个功能:是否将char数组转换为另一种类型违反严格别名规则?
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同意接受这两个投诉。
警告合法吗?
是的。这里的“object”或者是char或者是char的数组,而glvalue的类型是int。 https://timsong-cpp.github.io/cppwp/basic.lval#8中没有包含这种情况。 –