Aqui está:
#include <iostream>
int main()
{
std::endl(std::operator<<(std::cout, "Hello world!"));
}
Ao escrevê-lo dessa maneira, evitamos ADL propensas a erros, além de usar diretivas e declarações.
Isso pretende ser uma resposta sarcástica. :-D
Estou com Herb Sutter no Google neste. Dos padrões de codificação C ++:
Você pode e deve usar o namespace usando declarações e diretivas liberalmente em seus arquivos de implementação após #include diretivas e se sentir bem com isso. Apesar de repetidas afirmações em contrário, o espaço para nome usando declarações e diretivas não é ruim e não anula o objetivo dos espaços para nome. Em vez disso, são eles que tornam os espaços para nome utilizáveis .
Você pode ficar obcecado com possíveis conflitos no espaço de nome que provavelmente nunca se manifestarão e provavelmente não serão difíceis de corrigir em um evento astronomicamente raro, evitando cuidadosamente as usingdiretivas e especificando explicitamente tudo o que você usa (até os operadores) com usingdeclarações ou apenas vá em frente e comece using namespace std. Eu recomendo este último do ponto de vista da produtividade.
A maioria dos livros de texto em c ++ ensina aos iniciantes o uso do namespace std; eles estão propagando más práticas de codificação?
O contrário, se você me perguntar, e acredito que Sutter acima concorda.
Agora, ao longo da minha carreira, encontrei cerca de três conflitos no espaço de nomes como resultado direto de using diretivas em bases de código que abrangem dezenas de milhões de LOC. No entanto, nos três casos, eles estavam em arquivos de origem que abrangiam mais de 50.000 linhas de código legado, originalmente escritas em C e depois bastardizadas para C ++, executando uma lista eclética maciça de funções díspares, incluindo cabeçalhos de uma dúzia de bibliotecas diferentes e tendo uma lista épica #includesque se estendeu por uma página. Apesar da bagunça épica, eles não eram muito difíceis de corrigir, pois causavam erros de compilação no OSX (o único SO em que o código não conseguiu compilar), não erros de execução. Não organize seu código dessa maneira assustadora e você ficará bem.
Dito isto, evitar tanto using directivas e declarações em arquivos de cabeçalho. Isso é simplesmente retardado. Mas para arquivos de origem, e especialmente aqueles que não têm uma página inteira cheia de #includediretivas, eu diria que não se preocupe se você não estiver trabalhando no Google.