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ónfor (
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.