पर विचार करें निम्नलिखित सी ++ प्रोग्राम समारोह टेम्पलेट के साथ काम नहीं करता है:क्यों तर्क आश्रित लुक dynamic_pointer_cast
#include <memory>
struct A {};
struct B : A {};
int main()
{
auto x = std::make_shared<A>();
if (auto p = dynamic_pointer_cast<B>(x));
}
जब MSVC 2010 संकलन, मैं निम्न त्रुटि प्राप्त:
error C2065: 'dynamic_pointer_cast' : undeclared identifier
त्रुटि बनी रहती है यदि auto
std::shared_ptr<A>
द्वारा प्रतिस्थापित किया गया है। जब मैं std::dynamic_pointer_cast
के साथ कॉल को पूरी तरह अर्हता प्राप्त करता हूं, तो प्रोग्राम सफलतापूर्वक संकलित करता है।
इसके अलावा, gcc 4.5.1 यह पसंद नहीं करता है या तो:
error: 'dynamic_pointer_cast' was not declared in this scope
मैंने सोचा था कि std::dynamic_pointer_cast
हैं std
नाम स्थान में x
जीवन के प्रकार के बाद से, Koenig lookup द्वारा उठाया गया है। मुझे यहां क्या समझ नहीं आ रहा है ?
इसे क्या बना रहा है ** std :: dynamic_pointer_cast ** फेंकता है? – DumbCoder
@DumbCoder: जैसा कि मैंने कहा था, जब मैं 'std :: dynamic_pointer_cast' का उपयोग करता हूं तो प्रोग्राम संकलित करता है। मैं इस बारे में उत्सुक हूं कि क्यों कंपेलर एडीएल द्वारा 'dynamic_pointer_cast' नहीं चुनता है। –
क्षमा करें उस भाग को स्किम किया, मेरा बुरा !! – DumbCoder