पर विचार करें निम्नलिखित घोषणा:std :: array के इनलाइन प्रारंभिकरण में क्या गलत है?
#include <array>
struct X
{
//std::array<bool,3> arr={false,false,false};
bool brr[3]={false,false,false};
};
के रूप में है, यह छ ++ 5.2 से सामान्य रूप से संकलित करता है। लेकिन अगर मैं std::array
uncomment, मैं कोई त्रुटि मिलती है:
test.cpp:5:46: error: array must be initialized with a brace-enclosed initializer
std::array<bool,3> arr={false,false,false};
^
test.cpp:5:46: error: too many initializers for ‘std::array<bool, 3u>’
OTOH, इस घोषणा main()
अंदर समस्याओं के बिना काम करता है। इसके अलावा, निम्नलिखित आरंभ struct X
अंदर काम करता है:
std::array<bool,3> arr={{false,false,false}};
मैं struct परिभाषा एकल ब्रेसिज़ के साथ सरल आरंभीकरण का उपयोग क्यों नहीं कर सकते हैं?
ध्यान दें, सी ++ 11 के रूप में सी ++ 14 करने का विरोध किया वर्ग initializers में होने [बनाता में:
ब्रेसिज़ के एक आंतरिक सेट का उपयोग बग रिपोर्ट में बताया गया है एक संभव काम के आसपास है एक गैर-समेकित स्ट्रैट] (http://stackoverflow.com/q/27118535/1708801)। –