El siguiente código se ve bien para mí:C2070 - operando sizeof ilegal
#include <stdio.h>
template <typename T>
struct A
{
static float m_kA[];
};
template <typename T>
float A<T>::m_kA[] = {1.0f, 2.0f, 3.0f};
int main()
{
printf("%d\n",
sizeof(A<unsigned int>::m_kA)/
sizeof(A<unsigned int>::m_kA[0]));
return 0;
}
Pero cuando compilo con VC9 me sale el siguiente error
error C2070: 'float []': illegal sizeof operand
yo esperaría este código para compilar. ¿Me estoy perdiendo de algo? ¿Alguien sabe una manera de solucionar este comportamiento extraño (tenga en cuenta que exactamente lo mismo sin la plantilla compila bien y saca 3).
Tenga en cuenta que eliminar la plantilla no es una opción, hice este ejemplo para reproducir un problema que tengo en un código donde necesito que el tipo que contiene la matriz sea una plantilla.
Gracias
FWIW, compila bien en GCC 4.7.1: http://liveworkspace.org/code/19f48dbdb07463b08a310c168ab59a67. Mira que sea otro error de MSVC o algo así. – chris
No creo que la expresión esté calculando lo que crees que está calculando. – Nobody
@ Nadie 'sizeof array/sizeof array [0]' es una expresión común que calcula la longitud de la matriz.¿Qué crees que calcula, o qué crees que otras personas piensan que calcula? – hvd