2011-08-17 10 views
14

वी.एस. 2010 SP1 में काम, निम्नलिखित:"को हटाने" कॉपी ctor/C++ 11

class Foo 
{ 
public: 
    Foo() { } 
    Foo(Foo const&) = delete; // Line 365 
    Foo& operator=(Foo const&) = delete; // Line 366 
}; 

संकलन नहीं है। यह शिकायत करता है:

CPPConsole.cpp (365): त्रुटि C2059: वाक्यविन्यास त्रुटि: ';'
CPPConsole.cpp (365): त्रुटि C2238: अप्रत्याशित टोकन 'से पहले'; '
CPPConsole.cpp (366): त्रुटि C2059: वाक्यविन्यास त्रुटि: ';'
CPPConsole.cpp (366): त्रुटि C2238: अप्रत्याशित टोकन 'से पहले'; '

क्या यह अभी तक समर्थित नहीं है? अजीब बात यह है कि इंटेलिसेंस इस निर्माण को पहचानने लगता है। यह कहता है "IntelliSense: function" Foo :: ऑपरेटर = (कॉन्स फू &) "(लाइन 366 पर घोषित) संदर्भित नहीं किया जा सकता है - यह एक हटाया गया फ़ंक्शन है"

मुझे क्या याद आ रही है?

उत्तर

33

वीएस 2010 में दोहरी व्यक्तित्व है। विशेष रूप से, यह वास्तव में दो पूरी तरह से अलग संकलक फ्रंट सिरों है।

जब आप कोड संकलित करते हैं, तो यह माइक्रोसॉफ्ट के अपने कंपाइलर के साथ किया जाता है, जो एमएस-डॉस के लिए एमएस सी 3.0 पर वापस जाता है, ~ 3 दशक पहले जारी किया गया था (यदि आप सोच रहे हैं कि यह 3.0 क्यों था, एमएस इससे पहले लैटिस सी का पुनः लेबल वाला संस्करण बेचा गया)।

वीएस 2008 तक, आईडीई में पार्सिंग कंपेलर की तुलना में आदिम थी, इसलिए इसने बहुत अधिक परिष्कृत सी ++ को सही ढंग से पार्स नहीं किया। उन्होंने फैसला किया कि संक्रामक से मेल खाने के लिए आईडीई के मौजूदा पार्सर को अपग्रेड करने की कोशिश करने के बजाय अस्वीकार्य था, उन्होंने ईडीजी कंपाइलर फ्रंट एंड को लाइसेंस दिया।

यह विपरीत स्थिति को कम या कम देता है: इंटेलिसेंस के लिए आईडीई का पार्सर अब कंपाइलर पर एक के अनुरूप होने के करीब है, और संकलक के सी ++ 0x संरचनाओं की एक उचित संख्या को पहचानता है जो संकलक नहीं करता है।

कहानी के मुकाबले कुछ और है, हालांकि: ईडीजी कंपाइलर फ्रंट एंड वीसी ++ की तरह उचित कार्य करने के लिए एक स्विच का समर्थन करता है, जिसमें वीसी ++ की उचित संख्या को अनुकरण करना शामिल है। हालांकि मेरे पास इसकी पुष्टि करने के लिए डेटा नहीं है, मेरी धारणा यह होगी कि माइक्रोसॉफ्ट उस क्षमता का उपयोग करता है। चूंकि यह ईडीजी पर आधारित है, वीसी ++ कंपाइलर ले रहा है, और इसकी बग को अनुकरण कर रहा है, यह शायद एक उचित अनुमान है कि (कम से कम आमतौर पर) ईडीजी का वीसी ++ इम्यूलेशन वीसी ++ के पीछे एक संस्करण के बारे में बताएगा। इससे कुछ हद तक विरोधाभासी स्थिति होती है जहां ईडीजी (सामान्य उपयोग में) आमतौर पर वीसी ++ से थोड़ा आगे होता है, लेकिन आईडीई में संस्करण एमएस का उपयोग संभवतया कम से कम थोड़ा सा होता है।

+2

धन्यवाद! एक ऐतिहासिक परिप्रेक्ष्य के साथ सवाल का जवाब देने के लिए +1 भी। – ForeverLearning

+0

मुझे यकीन नहीं है कि इंटेलिजेंस पार्सर आपूर्ति किए गए कंपाइलर की तुलना में मानक के करीब है। जब मैं इंटेलिजेंस दिखाता हूं कि "कोई ऑपरेटर मिलान ऑपरेशंस" नहीं दिखा रहा है, जबकि मैं इंटेलिजेंस को एडीएल को बिना किसी समस्या के पाता हूं। ऐसा लगता है कि अनुरूपता के लिए एक अलग पार्सर का कारण नहीं था, बल्कि पार्सिंग गति। –

+0

@ जीन - कंपाइलर एडीएल और टेम्पलेट्स सही तरीके से नहीं करने के लिए जाना जाता है।ईडीजी फ्रंट एंड अधिक विश्वसनीय है। –

-1

यह अभी तक वीएस -2010 में लागू नहीं किया गया है।

+0

फिर इंटेलिजेंस कैसे जानता है कि यह हटा दिया गया है और इसलिए संदर्भित नहीं किया जा सकता है? – ForeverLearning

+3

अगर मैं इससे परेशान नहीं था तो मैं अपने प्रश्न में एक "अजीब" बात क्यों इंगित करूंगा? – ForeverLearning

+1

@DeadMG, क्रॉस न करें। _ "मुझे क्या याद आ रही है?" _ प्रश्न का उतना हिस्सा है जितना _ "क्या यह अभी तक समर्थित नहीं है?" _। –

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