संकलन समय पर endianess जाँच करने के लिए एक तरह से मैं निम्नलिखित समाधान के साथ आए हैं के लिए कुछ खोज के बाद:संकलन समय पर अंतहीनता का परीक्षण: क्या यह कॉन्स्टेक्सर मानक मानक के अनुसार सही है?
int b[is_big_endian() ? 12 : 25]; //works
std::array<int, testendian() ? 12 : 25> c; //fails
:
static const int a{1};
constexpr bool is_big_endian()
{
return *((char*)&(a)) == 1;
}
जीसीसी केवल कुछ संदर्भों जहां constexpr की आवश्यकता है में इस कोड को स्वीकार करता है
दूसरे मामले के लिए, जीसीसी कहते हैं error: accessing value of ‘a’ through a ‘char’ glvalue in a constant expression
। मुझे मानक में कुछ भी नहीं मिला जो ऐसी चीज को रोकता है। हो सकता है कि कोई व्यक्ति स्पष्टीकरण दे सके कि किस मामले में जीसीसी सही है?
चेतावनी के साथ पहले व्यक्ति को संकलित करने का प्रयास करें (संकेत: यह एक वीएलए है)। –
खैर, सी ++ 11 में जहां तक मुझे याद है वैरिएबल लम्बाई सरणी नहीं है। हालांकि, यह एक अलग बग है, क्योंकि मुझे -वॉल के साथ कोई चेतावनी नहीं मिलती है। बीटीडब्लू, मैं जीसीसी -4.7 – p12
का उपयोग करता हूं, मुझे किसी भी तरह से संदेह है कि यह एक मौलिक स्तर पर संभव है: एंडियननेस * कार्यान्वयन * की एक संपत्ति है, लेकिन * भाषा * के नियमों को लागू करने के परिणामस्वरूप संकलन-समय जादू पूरी तरह से होता है। विशेष रूप से, किसी ऑब्जेक्ट का पता लेना संकलन-समय अवधारणा प्रतीत नहीं होता है। –