ultima compiler compilador c++ c++11 gcc for-loop g++

c++ - compiler - Error de GCC en la declaración de rango para



gnu g++ compiler (1)

Parece que he encontrado un error extraño en GCC. Considerar

for (int i = 5 : {1, 2, 3}) std::cout << i << ", ";

Si bien este código sin sentido es rechazado correctamente por Clang , compila y ejecuta bien en todas las versiones recientes de GCC . Lo extraño es que no se produce ninguna salida, ni 1, 2, 3 ni 5, 5, 5 .

Si ahora vamos más allá y consideramos este código

int arr[] {1, 2, 3}; for (int i = 5: arr) std::cout << i << ", ";

GCC nos advierte que la matriz no se usa , lo que implica que se ignora el ciclo.

¿Este código invoca un comportamiento indefinido? ¿O está mal formado, sin necesidad de diagnóstico? ¿O es simplemente un error extraño?
El estándar especifica en [stmt.range] / 1 que la declaración se sustituye en la siguiente línea:

for-range-declaration = *__begin;

... y tal declaración claramente estaría mal formada.

Editar: Después de reportar el error , Paolo Carlini lo arregló para la versión 5.0.


Ambos ejemplos son sintaxis no válida, que requiere un diagnóstico.

La sintaxis para el rango para está en 6.5 / 1:

iteración-declaración :

  • ...
  • for ( declaración for ( for-range-declaration : for-range-initializer )

for-range-declaration :

  • atributo-especificador-seq opt decl-specifier-seq declarator

que no permite un inicializador antes de los dos puntos.