मानक, std::optional<T>
की कॉपी-निर्माता के अनुसार:टीडी नहीं होने पर स्ट्रॉड :: वैकल्पिक का स्थान-निर्माणकर्ता क्यों नहीं हटाया जाता है?
... के रूप में नष्ट जब तक
is_copy_constructible_v<T>
true
है परिभाषित किया जाएगा।
लेकिन std::optional<T>
की चाल-निर्माता:
... अधिभार संकल्प में भाग नहीं होगा जब तक कि
is_move_constructible_v<T>
true
है।
जैसा कि मैंने understand deleted constructors, नहीं-को हटाने std::optional<T>
की चाल-निर्माता के प्रयोजन के कोड इस तरह की अनुमति के लिए होगा:
std::optional<X> o1;
std::optional<X> o2(std::move(o1));
... कुछ रूपांतरण अनुक्रम पर निर्भर काम करने के लिए - o2
होगा A
के ऑब्जेक्ट द्वारा निर्मित किया गया है जिसे std::optional<X>&&
का उपयोग करके बनाया गया है (यदि मैं गलत हूं तो मुझे सही करें)।
लेकिन std::optional
के संभावित निर्माताओं के बारे में, मैं एक कठिन समय एक ही है कि इस प्रयोग के मामले से मेल खा सकते पता लगाना है ...
क्यों std::optional<T>
की चाल-निर्माता बस नहीं हटा दी जाती है अगर T
है स्थानांतरित नहीं हो सकता है?
तो यह केवल 'एक्स' मानों से 'वैकल्पिक' के निर्माण की अनुमति देने के लिए है जब 'टी' कॉपी करने योग्य है लेकिन चलने योग्य नहीं है? – Holt
@ होल्ट: बिल्कुल। – sp2danny
यदि टी टी नहीं चल रहा है तो रचनात्मक को ओवरलोड रिज़ॉल्यूशन से बाहर करने के लिए कैसे घोषित किया जाना चाहिए? '= डिफ़ॉल्ट' के रूप में? –