तर्क K
const typename A<K>::X
में निगम्य नहीं है:
#include <iostream>
template<typename K>
struct A {
struct X { K p; };
struct Y { K q; };
};
template<typename K>
void foo(const typename A<K>::X& x, const typename A<K>::Y& y) {
std::cout << "A" << std::endl;
}
int main() {
A<float>::X x;
A<float>::Y y;
foo(x, y);
}
बजना निम्न त्रुटि संदेश देता है। असल में, ::
के बाकी सब कुछ deducible नहीं है (यदि ::
नेस्टेड-नाम को अलग करता है)।
यह देखने के लिए क्यों यह कोई मतलब नहीं है यह सोचा प्रयोग के माध्यम से चलाकर कटौती के लिए पूछने के लिए तुच्छ है: (जैसे कि किसी भी प्रकार को देखते हुए:
struct A { typedef int type; }
struct B { typedef int type; }
template <typename T> void foo(typename T::type);
foo(5); // is T == A or T == B ??
नेस्टेड प्रकार के प्रकार से कोई एक-से-एक मानचित्रण है int
के रूप में), ऐसे कई परिवेश प्रकार हो सकते हैं जिनमें से यह घोंसला वाला प्रकार है, या वहां कोई भी आवश्यकता नहीं है।
स्रोत
2012-09-24 13:39:48