निम्नलिखित कोड का संकलन करते समय क्लैंग एक चेतावनी देता है:
struct Base
{
virtual void * get(char* e);
// virtual void * get(char* e, int index);
};
struct Derived: public Base {
virtual void * get(char* e, int index);
};
चेतावनी है:
warning: 'Derived::get' hides overloaded virtual function [-Woverloaded-virtual]
(उक्त चेतावनी को सक्षम करने की आवश्यकता है)।
मुझे समझ में नहीं आता क्यों। ध्यान दें कि बेस में समान घोषणा को अनसुना करने से चेतावनी समाप्त हो जाती है। मेरी समझ यह है कि चूंकि दो मिलते हैं () फ़ंक्शंस में अलग-अलग हस्ताक्षर होते हैं, इसलिए कोई छुपा नहीं हो सकता है।
क्लैंग सही है? क्यों?
ध्यान दें कि यह XOS के हाल के संस्करण को चलाने वाले MacOS X पर है।
clang --version
Apple LLVM version 5.0 (clang-500.1.74) (based on LLVM 3.3svn)
अपडेट: Xcode 4.6.3 के साथ समान व्यवहार।
get
फ़ंक्शन के सदस्य को स्थिर प्रकार की वस्तु पर एकल तर्क के साथ आमंत्रित कर सकते हैंDerived
। उपयोग की घोषणा के बिना, एक ही बात एक संकलन त्रुटि को जन्म देगी।