के लिए ब्रेसिड प्रारंभिकरण का उपयोग नहीं कर सकता है।क्लैंग उपयोगकर्ता द्वारा परिभाषित रूपांतरण
struct A {
A() {}
};
struct B {
B() {}
explicit operator A() { return A{}; }
};
struct C {
A a;
C(B b) : a{b} {}
};
मैं एक struct A
जो कुल constructible (क्योंकि यह एक निर्माता परिभाषित है) नहीं है। यह struct B
के लिए जाता है। लेकिन इसमें struct A
पर एक स्पष्ट उपयोगकर्ता परिभाषित रूपांतरण ऑपरेटर भी है। अब struct C
का कन्स्ट्रक्टर struct B
लेता है, और struct A
बनाने के लिए इसका उपयोग करता है। cppreference पर, रूपांतरण ऑपरेटर प्रत्यक्ष प्रारंभ में भाग ले सकता है, जो मुझे लगता है कि सदस्य struct C
के सदस्य प्रारंभ करने का मामला है। यह जीसीसी 5.2 (सी ++ 11) पर गुजरता है। लेकिन हालांकि यह क्लेंग 3.6 पर विफल रहता है। मैंने सी ++ 11, सी ++ 14, और सी ++ 1z के साथ प्रयास किया।
यदि मैं a{b}
से a(b)
बदलता हूं, तो यह क्लैंग और जीसीसी दोनों पर जाता है।
मुझे आश्चर्य है कि यह एक क्लैंग बग है या मैंने मानक को गलत समझा है?
संबंधित [क्या ब्रांडेड प्रारंभकर्ता सूचियों में स्पष्ट रूपांतरण ऑपरेटर की अनुमति है?] (Http://stackoverflow.com/q/27573928/3953764) –
[क्लैंग ++ 3.8.0 में काम करता है] (http://melpon.org/wandbox/permlink/3sDuu76ZIsQPy2ay) –
@PiotrSkotnicki क्या यह शायद http://wg21.cmeerw.net/cwg/issue1467 है? – dyp