निम्नलिखित कार्यक्रम अच्छी तरह से गठित है?
#include <vector>
struct A {
explicit A(int) {}
};
int main() {
std::vector<int> vi = {1, 2, 3, 4, 5};
std::vector<A> va(vi.begin(), vi.end());
}
C ++ 17 के अनुसार [क्रम ।reqmts], के लिए आवश्यकता
X u(i, j);
X
एक अनुक्रम कंटेनर कहां है:
T
होगाEmplaceConstructible
मेंX
से*i
।
हालाँकि, पूर्ववर्ती पैराग्राफ में यह कहा गया है कि:
i
औरj
इनपुट पुनरावृत्तियों आवश्यकताओं को पूरा करने वाले पुनरावृत्तियों को निरूपित करते हैं और तत्वों को संदर्भित करते हैं, जो स्पष्ट रूप से परिवर्तनीय हैंvalue_type
,
इस प्रकार यह मुझे लगता है कि दोनों आवश्यकताओं को पूरा करने की आवश्यकता होगी: श्रेणी के मूल्य प्रकार को कंटेनर के मूल्य प्रकार के लिए परिवर्तनीय होना चाहिए , और EmplaceConstructible
संतुष्ट होना चाहिए (जिसका अर्थ है कि आवंटनकर्ता आवश्यक प्रारंभ करने में सक्षम होना चाहिए) । चूंकि int
अंतर्निहित रूप से परिवर्तनीय नहीं है A
, इसलिए इस कार्यक्रम को बीमार होना चाहिए।
हालांकि, आश्चर्यजनक रूप से, यह जीसीसी के तहत संकलन लगता है ।