निम्न कोड को संकलित करता है और रन जीसीसी 4.9.1 और बजना-3.6 में जब -std = C++ 11 का उपयोग:प्रारंभ 4.8
struct Bar
{
int x;
};
struct Foo
{
static constexpr Bar bars[] = {1, 2, 3};
};
constexpr Bar Foo::bars[];
हालांकि, यह जीसीसी में विफल रहता है 4.8.3, त्रुटि संदेश में जिसके परिणामस्वरूप
./cpptest.cpp:14:43: error: could not convert '1' from 'int' to 'const Bar'
static constexpr Bar bars[] = {1, 2, 3};
^
./cpptest.cpp:14:43: error: could not convert '2' from 'int' to 'const Bar'
./cpptest.cpp:14:43: error: could not convert '3' from 'int' to 'const Bar'
संयोग से, अगर मैं एक ही बात है, लेकिन bars
एक स्थिर स्थिरांक वैश्विक सरणी बनाने के लिए, यह जीसीसी 4.8 और बजना में ठीक संकलित करता है। अगर मैं {}
की एक अतिरिक्त जोड़ी के साथ सूची में प्रत्येक पूर्णांक अक्षर को घेरता हूं तो यह ठीक से संकलित होगा।
तो क्या यह gcc 4.8 में एक बग है? मानक कहता है कि इसके लिए उचित वाक्यविन्यास क्या है? जब मैं अतिरिक्त ब्रेसिज़ को छोड़ देता हूं तो सी ++ 11 वर्दी प्रारंभिक मानक का किस भाग का आह्वान किया जा रहा है?
संपादित करें: ऐसा लगता है कि मानक की तरह का कहना है कि इस कुल प्रारंभ है, जो "ब्रेस इलिजन" के लिए अनुमति चाहिए आह्वान करना चाहिए। तो ऐसा लगता है कि यह जीसीसी 4.8 में एक बग है, जिसे जीसीसी 4.9 द्वारा तय किया गया था, लेकिन मुझे मानक के पढ़ने में पूरी तरह से विश्वास नहीं है। मुझे इसके बारे में जीसीसी के बग ट्रैकर में कोई भी बग रिपोर्ट नहीं मिल रही है, इसलिए मैं आसानी से गलत हो सकता था।
क्या आपने इसे एक बग माना था जिसे तय किया गया था? – edmz