के आकार को static_assert कैसे करें, मैं किसी सदस्य चर पर सरणी आकार प्रतिबंधों के बारे में स्पष्ट होना चाहता हूं, ताकि दूसरों को गलती से मूर्ख परिवर्तन करने से रोक सकें। निम्नलिखित अनुभवहीन प्रयास संकलन नहीं:std :: array सदस्य
struct Foo
{
std::array< int, 1024 > some_array;
static_assert((some_array.size() % 256) == 0, "Size must be multiple of 256");
//^ (clang) error: invalid use of non-static data member 'some_array'
};
भी std::array::size
हालांकि एक constexpr है, मैं सीधे static_assert
उस तरह उपयोग नहीं कर सकते न समारोह न ही मेरे सदस्य चर स्थिर है, क्योंकि।
समाधान मैं के साथ उपयोग करने के लिए है आया decltype
इस प्रकार है (के बाद से मैं सरणी typedef नहीं करना चाहती):
static_assert((decltype(some_array)().size() % 256) == 0, "Size must be multiple of 256");
यह लग रहा है यह है की तरह डिफ़ॉल्ट-निर्माण एक rvalue, जो मैं नहीं सोचा constexpr है।
यह क्यों काम करता है?
क्या स्थिर दावा प्राप्त करने के लिए कोई क्लीनर तरीका है?
आपका समारोह मुझे सर o.o के लिए ठीक काम करता है, Vusal स्टूडियो में। – Jts
'(घोषणा() आकार()% 256) == 0' काम नहीं करता है? –