अनुसार 7.3.1.2 करने के लिए नाम स्थान सदस्य परिभाषाओं 14882: 2003 (ई)सी ++ फॉरवर्ड घोषणा और नाम स्थान में मैत्री सी ++ मानक आईएसओ/आईईसी में
हर नाम पहली बार एक नाम स्थान में घोषणा की कि नाम स्थान का एक सदस्य है । यदि किसी गैर-स्थानीय वर्ग में किसी मित्र की घोषणा पहले को कक्षा या फ़ंक्शन घोषित करती है (इसका अर्थ यह है कि कक्षा का नाम या फ़ंक्शन अयोग्य है) मित्र वर्ग या फ़ंक्शन का सबसे निचला नामांकन नामस्थान का सदस्य है।
// Assume f and g have not yet been defined.
void h(int);
template <class T> void f2(T);
namespace A {
class X {
friend void f(X); // A::f(X) is a friend
class Y {
friend void g(); // A::g is a friend
friend void h(int); // A::h is a friend
// ::h not considered
friend void f2<>(int); // ::f2<>(int) is a friend
};
};
// A::f, A::g and A::h are not visible here
X x;
void g() { f(x); } // definition of A::g
void f(X) { /* ... */} // definition of A::f
void h(int) { /* ... */ } // definition of A::h
// A::f, A::g and A::h are visible here and known to be friends
}
void h(int);
के बाद से पहली बार विश्व नाम स्थान में घोषित किया जाता है, यह वैश्विक नामस्थान का एक सदस्य है। class Y
में A::h
पर ::h
पर मित्र घोषणा friend void h(int);
क्यों है?
आप कक्षा X पर एक शून्य मित्र घोषित कर रहे हैं। अगर ऐसा कुछ और हुआ तो मैं चिंतित होगा। शून्य एच (int) वैश्विक में पहले घोषित किया गया है लेकिन वाई स्पष्ट रूप से नामस्थान ए में है। – Jay