इन दोनों कार्यों पर विचार करें:क्या एक अन्य सरणी में एक चार सरणी कास्टिंग सख्त-एलियासिंग नियमों का उल्लंघन करता है?
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);
}
जीसीसी चेतावनी दी है कि पहले सख्त अलियासिंग के नियमों का उल्लंघन। लेकिन दूसरा ठीक है।
क्लैंग दोनों शिकायत के बिना स्वीकार करता है।
क्या चेतावनी वैध है?
हां। यहां "ऑब्जेक्ट" या तो 'char' या' char' की सरणी है और glvalue प्रकार 'int' है; https://timsong-cpp.github.io/cppwp/basic.lval#8 में कुछ भी इस मामले को शामिल नहीं करता है। –