Su problema no es que la estructura no tenga nombre, sino que la estructura se declara localmente. El uso de tipos locales como argumentos de plantilla no está permitido en C++ 03. Sin embargo, estará en C++ 0x, por lo que puede intentar actualizar su compilador.
EDITAR: En realidad, su problema es que dentro de una lista de argumentos de plantilla no es un lugar legal para poner una definición de clase, con o sin un nombre, de acuerdo con el estándar de C++.
litb señala que a pesar de que encaja en la gramática de C++ 0x, la definición de un tipo que aquí está prohibido por [dcl.type]
:
A fi cador-ss tipo específico no deberá de fi nir una clase o enumeración no ser que aparezca en el id. de tipo de una declaración de alias (7.1.3) que no es la declaración de una declaración de plantilla.
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 }
Durante un tiempo tuve una pregunta sobre typedef nombres, pero litb aclarado eso. Que pueden utilizarse como argumentos de plantilla a través de:
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
En C++ 0x, un objeto de un tipo sin nombre se puede deducir como un argumento de plantilla, pero no creo un tipo sin nombre se puede especificar explícitamente en la lista de argumentos de la plantilla. –
Prasoon, ¿me puede remitir a la sección correcta de la norma, por favor? Mi caso de prueba con una estructura sin nombre (pasado a typedef, pero todos sabemos que un nombre typedef no es un nombre de estructura) compila muy bien. –
@Ben: '14.3.1/2' –