Recientemente estuve modificando un código y encontré un error preexistente en una línea dentro de una función:
std:;string x = y;
Este código aún se compila y funciona como se esperaba.
La definición de cadena funciona porque este archivo lo es using namespace std;
, por lo que std::
era innecesario en primer lugar.
La pregunta es, ¿por qué está std:;
compilando y qué está haciendo, si es que está haciendo algo?
using namespace std;
.http://www.stackoverflow.com
compila ...using namespace std;
:)Respuestas:
std:
es una etiqueta, utilizable como destinogoto
.Como señaló @Adam Rosenfield en un comentario, es un nombre de etiqueta legal.
C ++ 03 §6.1 / 1:
fuente
Es una etiqueta, seguida de una declaración vacía, seguida de la declaración de una cadena
x
.fuente
Es una etiqueta seguida por la cadena
fuente
fuente
(label-)statement
, no unexpression
.El compilador te dice lo que está pasando:
Tanto gcc como clang dan una advertencia bastante clara:
La conclusión de esta historia: compile siempre su código con las advertencias habilitadas (por ejemplo
-Wall
).fuente