Recentemente, estava modificando algum código e encontrei um bug pré-existente em uma linha de uma função:
std:;string x = y;
Este código ainda é compilado e está funcionando conforme o esperado.
A definição da string funciona porque esse arquivo é using namespace std;
, portanto, std::
era desnecessário em primeiro lugar.
A questão é: por que está std:;
compilando e o que, se houver, está fazendo?
using namespace std;
.http://www.stackoverflow.com
compila ...using namespace std;
:)Respostas:
std:
é um rótulo, utilizável como alvo paragoto
.Conforme apontado por @Adam Rosenfield em um comentário, é um nome de rótulo legal.
C ++ 03 §6.1 / 1:
fonte
É um rótulo, seguido por uma instrução vazia, seguida pela declaração de uma string
x
.fonte
É um rótulo que é seguido pela string
fonte
fonte
(label-)statement
, não umexpression
.O compilador informa o que está acontecendo:
Tanto o gcc quanto o clang fornecem um aviso bastante claro:
A conclusão dessa história: sempre compile seu código com os avisos habilitados (por exemplo
-Wall
).fonte