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.comcompila ...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