Есть хорошая книга котрую я давно читал – «Стандарты программирования на C++ 101 правило и рекомендация» Герб Саттер, Андрей Александреску. Там была вот такая рекомендация №59: «Не используйте using для пространств имен в заголовочных файлах или перед директивой #include». И вот я заметил, что в коде сгенеренным мастером ATL используется using namespace в *.h:
...
using namespace ATL;
// CNoNamePreview
class ATL_NO_VTABLE CNoNamePreview :
public CComObjectRootEx< CComSingleThreadModel >,
public CComCoClass< CNoNamePreview, &CLSID_NoNamePreview >,
public IObjectWithSiteImpl< CNoNamePreview >,
...
Вроде ничего такого, т.к. этот хедер дальше нигде не должен включатся. Но как-то непривычно что-ли. То что выше относится к MSVS2010sp1, а вот так делал мастер в MSVS2008sp1:
// stdafx.h
...
#define _ATL_NO_AUTOMATIC_NAMESPACE
...
using namespace ATL;
...