#include <iostream>
union gc_bits {
size_t value;
struct {
size_t arena : 2;
} bits;
constexpr gc_bits(size_t value_) : value(value_) {
}
};
static constexpr size_t get_max_arenas() {
return gc_bits(~0ULL).bits.arena;
}
size_t current_colour[get_max_arenas()]; // error
int main() {
std::cout << get_max_arenas() << std::endl;
}
सरणी घोषणा त्रुटियां बाहर निकलें क्योंकि get_max_arenas एक constexpr नहीं है। मैं इस बारे में स्पष्ट नहीं हूं कि ऐसा क्यों होना चाहिए।यह एक कॉन्स्टेक्सर क्यों नहीं है?
वैसे, आप 'मान' को लिखने और फिर' संघ में bits' से पढ़ें। क्या सी ++ में अनिर्धारित व्यवहार नहीं है? – gurka
मुझे नहीं पता, आपको यूनियनों में सामान्य उपसर्गों से पढ़ने की अनुमति है, और चूंकि मूल्य और बिट दोनों आकार_टी से शुरू होते हैं, मुझे लगता है कि इसे अनुमति दी जानी चाहिए। – DrPizza
वैसे 2: मानक यह नहीं कहता कि क्या दो बिट्स आकार_टी के बाएं या दाएं छोर से हैं। सीमा पोर्टेबिलिटी। मैं एक शिफ्ट और मुखौटा के साथ कोशिश करेंगे। –