2012-05-22 27 views
11
struct X{}; 

template<class T> 
decltype(X() == int()) f(T const&){ return true; } 

int main(void) { 
    X x; 
    f(x); 
} 

क्यों, क्यों? परिभाषित कहीं भी नहीं है!निम्न कोड MSVC++ के साथ संकलित क्यों करता है?

मैं वास्तव में समझना चाहता हूं कि एमएस कनेक्ट पर विस्तृत बग रिपोर्ट प्रदान करने के लिए यहां क्या हो रहा है। पागलपन के लिए अपनी यात्रा के आसपास here लाउंज < सी ++> चैट रुम में शुरू हुआ ...

(नोट: न तो GCC है और न ही बजना इस कोड को स्वीकार करते हैं।)

ओह, और btw, एक निजी X(int) ctor का कारण बनता है जोड़ने संकलन विफल:

struct X{ 
    X(){} 
private: 
    X(int); 
}; 

template<class T> 
decltype(X() == int()) f(T const&){ return true; } 

int main(void) { 
    X x; 
    f(x); 
} 

आउटपुट:

1>src\main.cpp(12): error C2248: 'X::X' : cannot access private member declared in class 'X' 
1>   src\main.cpp(4) : see declaration of 'X::X' 
1>   src\main.cpp(1) : see declaration of 'X' 
+0

क्या अन्य कंप्यूटर्स इसे स्वीकार करते हैं? –

+0

@ बिली: नहीं, उस जानकारी को जोड़ा गया। पृष्ठभूमि की जानकारी: मैं लगभग एमएसवीसी सी ++ चैटरूम में क्या करता हूं और कुछ घंटों के बाद छोड़ दिया गया है पर पागल हो गया। – Xeo

+0

पृष्ठभूमि जानकारी का एक बिट जोड़ा गया। इसके अलावा, क्या अनाम डाउनवॉटर कृपया डाउनवोट के कारण को सुन सकता है? – Xeo

उत्तर

7

एमएस कुलपति के किन संस्करणों का एक ++ क्या आप उपयोग कर रहे हैं?

जो कुछ के लिए सही हो सकता है

, कुलपति ++ 11 बीटा के साथ अपने कोड को खारिज कर दिया: मुझे यकीन है कि मैं क्या सबसे उपयोगी या सूचनात्मक त्रुटि संदेश कभी फोन करेंगे नहीं कर रहा हूँ, लेकिन

trash.cpp(8): error C2893: Failed to specialize function template ''unknown-type' f(const T &)' 
      With the following template arguments: 
      'X' 

यह कोड को अस्वीकार कर रहा है।

परिस्थितियों में, मुझे लगता है कि एक बग रिपोर्ट दर्ज करना शायद कम (यदि कुछ भी हो) पूरा करने जा रहा है। जिस प्रतिक्रिया की मैं अपेक्षा करता हूं वह अनिवार्य रूप से होगा: "पहले ही वीसी ++ 11 में तय किया गया है। जब आप कर सकते हैं तो अपग्रेड करें।"

+0

और यहां मैं सोच रहा था कि मैं वास्तव में वीएस 11 बीटा का उपयोग कर रहा था ... आपके पास क्या सटीक संस्करण है? मेरा "संस्करण 11.0.40825.2 PREREL"। – Xeo

+1

@Xeo: संस्करण 11.0.50214.1 BETAREL "। अगर मुझे गलती नहीं है तो आपके पास बीटा की बजाय तकनीकी पूर्वावलोकन है। –

+0

ठीक है, इसके लिए बहुत कुछ। * असली * बीटा डाउनलोड करने और बाद में जांचने के लिए, धन्यवाद। – Xeo

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