2014-05-08 31 views
6

से संबंधित है, मैं विजुअल स्टूडियो 2013 एक्सप्रेस का उपयोग कर रहा हूं।संकलक शिकायत नहीं करता है जब वेक्टर <char> && वेक्टर <char> और

class B{ 
public: 
    vector<char>& a; 
    int& b; 
    B(vector<char>& i,int& c) :a(i),b(c) {} 
}; 

int main(){ 
    int l=3; 
    vector<char> h; 
    shared_ptr<B> bb (new B(std::move(h),l)); 
    return 0; 
} 

क्यों कोड? स्वीकार किया जा सकता जब मैं एसटीडी तर्क एल :: चाल (एल) बदल गया है, संकलक शिकायत "करने के लिए 'int &' 'int' से तर्क 2 परिवर्तित नहीं कर सकते"।

+3

यह एक बग है। यह g ++ 4.9.0 और clang ++ 3.4 दोनों के साथ विफल रहता है। – kec

उत्तर

4

यह दृश्य सी ++ कंपाइलर में उपलब्ध एक भाषा विस्तार है और अब कुछ समय से अस्तित्व में है। एक्सटेंशन आपको एक गैर-कॉन्स संदर्भ में एक रैल्यू (टेम्पोरेरी) बांधने और मूल्य के जीवनकाल को बढ़ाने की अनुमति देता है जैसे कि आप const संदर्भ में बाध्यकारी थे .. यदि आप चेतावनी स्तर 4 सक्षम करते हैं या स्पष्ट रूप से चेतावनी C4239 सक्षम करते हैं तो संकलक आपको सतर्क करेगा किसी भी समय विस्तार का उपयोग किया जाता है।

C4239 के लिए प्रलेखन में एक उदाहरण शामिल है जो आपके प्रश्न में समान है।

संबंधित मुद्दे