यह मेरे लिए पीछे की ओर एक छोटे से लगता है, लेकिन यह काम करता है:सी ++ पैरामीटर स्कोप नामस्थान के भीतर फ़ंक्शन लुकअप को क्यों प्रभावित करता है?
#include <iostream>
namespace nTest
{
struct cTest {};
void fTest(cTest& x)
{
std::cout << "nTest::fTest(cTest&) called" << std::endl;
}
}
int main(void)
{
nTest::cTest x;
fTest(x); //Weird! fTest is resolved since its parameter belongs to nTest.
return 0;
}
आम तौर पर, आप nTest की आवश्यकता होगी :: FTEST तक पहुँचने के लिए है, लेकिन इसकी पैरामीटर जो nTest के अंतर्गत आता है संभव की सूची में nTest जोड़ने के लिए प्रकट होता है स्कोप्स जिसमें fTest की खोज करने के लिए। यह मेरे लिए अजीब लगता है कि पैरामीटर स्कोप फंक्शन लुकअप को प्रभावित करता है।
यह जीसीसी में ठीक है, लेकिन मुझे आश्चर्य है कि यह उपयोग पोर्टेबल है? इस स्कोपिंग तंत्र की आधिकारिक परिभाषा क्या है?
एडीएल - तर्क आश्रित लुकअप (http://en.wikipedia.org/wiki/Argument-dependent_name_lookup) – Nim
स्वीकार्य उत्तर भी पढ़ें [यहां] (http://stackoverflow.com/questions/2958648/what-are -the-pitfalls-of-adl) –