आपकी समस्या यह नहीं है कि संरचना का नाम बदल दिया गया है, यह है कि संरचना स्थानीय रूप से घोषित की जाती है। सी ++ 03 में टेम्पलेट तर्कों के रूप में स्थानीय प्रकारों का उपयोग करने की अनुमति नहीं है। यह हालांकि C++ 0x में होगा, इसलिए आप अपने कंपाइलर को अपग्रेड करने का प्रयास कर सकते हैं।
संपादित करें: असल में, आपकी समस्या यह है कि एक टेम्पलेट तर्क सूची के अंदर सी ++ मानक के अनुसार, नाम के साथ या बिना किसी वर्ग परिभाषा को रखने के लिए कानूनी जगह नहीं है।
litb बताते हैं कि हालांकि यह C++ 0x व्याकरण में फिट बैठता है, एक प्रकार यहाँ [dcl.type]
द्वारा निषिद्ध है परिभाषित करने:
एक प्रकार-विशिष्ट एर-सेक करेगा नहीं डी फाई ne कक्षा या गणन जब तक यह प्रकट होता है उपनाम-घोषणा (7.1.3) के प्रकार-आईडी में जो टेम्पलेट-घोषणा की घोषणा नहीं है।
simple-template-id:
template-name < template-argument-list_opt >
template-argument-list:
template-argument ..._opt
template-argument-list , template-argument ..._opt
template-argument:
constant-expression
type-id
id-expression
type-id:
type-specifier-seq abstract-declarator_opt
type-specifier-seq:
type-specifier attribute-specifier-seq_opt
type-specifier type-specifier-seq
type-specifier:
trailing-type-specifier
class-specifier
enum-specifier
class-specifier:
class-head { member-specification_opt }
थोड़ी देर के लिए मैं typedef नामों के बारे में एक सवाल था, लेकिन litb को मंजूरी दे दी है कि। वे के माध्यम से टेम्पलेट तर्क के रूप में अनुमति दी जाती है:
trailing-type-specifier:
simple-type-specifier
elaborated-type-specifier
typename-specifier
cv-qualifier
simple-type-specifier:
:: opt nested-name-specifier_opt type-name
:: opt nested-name-specifier template simple-template-id
char
char16_t
char32_t
wchar_t
bool
short
int
long
signed
unsigned
float
double
void
auto
decltype-specifier
type-name:
class-name
enum-name
typedef-name
simple-template-id
स्रोत
2011-01-01 03:35:56
सी ++ 0x में, एक अज्ञात प्रकार की वस्तु को टेम्पलेट तर्क के रूप में घटाया जा सकता है, लेकिन मुझे नहीं लगता एक अज्ञात प्रकार टेम्पलेट तर्क सूची में स्पष्ट रूप से निर्दिष्ट किया जा सकता है। –
प्रसून, क्या आप मुझे मानक के सही खंड में संदर्भित कर सकते हैं? एक अज्ञात संरचना के साथ मेरा टेस्ट केस (टाइपिफ़ को पास किया गया है, लेकिन हम सभी जानते हैं कि टाइपिफ़ नाम एक संरचना नाम नहीं है) बस ठीक है। –
@ बेन: '14.3.1/2' –