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中沒有包含這種情況。 –