निम्नलिखित कोड बजना के साथ सफलतापूर्वक संकलित 3.5.0 और जी ++ 4.9.0C++03 (flag -std=C++03
) के तहत, C++11 (flag -std=C++11
), और C++14 (flag -std=C++14
) (-Wall -Wextra -pedantic-errors
झंडे के साथ): यह अतिरिक्त typename
कीवर्ड जोड़ने के लिए मान्यटेम्पलेट पैरामीटर सूची में अतिरिक्त टाइपनाम कीवर्ड: क्या यह मान्य है या नहीं?
namespace N
{
typedef int T;
enum E{};
}
template <typename N::T>
struct ST{};
template <typename N::E>
struct SE{};
int main()
{
}
है गैर-प्रकार टेम्पलेट पैरामीटर घोषणा से पहले?
ध्यान दें कि निम्नलिखित कोड संकलन नहीं करता है (C++03, C++11, और C++14 कोड के रूप में):
typedef int T;
enum E{};
template <typename T t>
struct ST{};
template <typename E e>
struct SE{};
int main()
{
}
लेकिन बाद एक फिर से ठीक संकलित (C++03, C++11, और C++14) :
typedef int T;
enum E{};
template <typename ::T>
struct ST{};
template <typename ::E>
struct SE{};
int main()
{
}
मुझे संदेह है कि 'टाइपनाम एन :: टी' को एक प्रकार पैरामीटर के रूप में पार्स किया जाता है, जो वास्तविक प्रकार 'एन :: टी' से संबंधित नहीं है। हालांकि, इसका नाम अजीब है। – leemes
@dyp और आपके उद्धरण से क्या पालन करना चाहिए? – Constructor
@leemes हाँ, मुझे ऐसा भी लगता है। और यह * बहुत * अजीब है। – Constructor