2011-05-15 11 views
10

tomar este pequeño código de ejemplo:'advertencia C4709: operador de coma dentro de la expresión del índice de matriz' - ¡pero no hay coma para ver en ninguna parte!

struct Test{ 
    operator int() const{ 
     return 0; 
    } 
}; 

Test test(){ 
    return Test(); 
} 

int main(){ 
    int arr[10]; 
    arr[test()] = 5; 
} 

Compilación bajo Visual Studio 2010 con /W4said warning genera. Curiosamente, si agrego un simple constructor predeterminado, la advertencia desaparece de repente. Además, solo funciona en esa constelación. Si elimino la llamada de función o no devuelvo un tipo definido por el usuario, la advertencia desaparece. Además, como se esperaba, GCC no produce tal advertencia.

Entonces, ¿puedo tomar esta advertencia con el código anterior como un error en Visual Studio o hay más de lo que parece? Sin embargo, sería muy sorprendente, por decir lo menos.


Editar: Creado un bug report on Microsoft Connect.

+1

Puedo reproducir este comportamiento en VC++ 2008. Aunque para ser sincero, nunca he encontrado este comportamiento en VC++ hasta ahora, porque siempre defino un constructor para mis clases. –

+0

@In silico: reetiquetado a 'visual-studio' luego. :) – Xeo

+0

Sin advertencia para VS2005 –

Respuesta

5

Definitivamente es un error - advertencia engañosa.

+0

Creó un informe de error, entonces ... vota si puedes. :) – Xeo

Cuestiones relacionadas