Source files
SF.7
Не пишите `using namespace` в глобальной области видимости в заголовочном файле
Причина
Это лишает тех, кто включает файл через #include, возможности эффективно устранять неоднозначности и использовать альтернативы. Это также делает включаемые заголовки зависимыми от порядка, поскольку они могут иметь разный смысл при включении в разном порядке.
Пример
// bad.h
#include <iostream>
using namespace std; // bad
// user.cpp
#include "bad.h"
bool copy(/*... some parameters ...*/); // some function that happens to be named copy
int main()
{
copy(/*...*/); // now overloads local ::copy and std::copy, could be ambiguous
}
Примечание
Исключением является using namespace std::literals;. Это необходимо для использования строковых литералов в заголовочных файлах, и согласно правилам — пользователи обязаны называть свои UDL operator""_x — они не будут конфликтовать со стандартной библиотекой.
Контроль
Отмечайте using namespace в глобальной области видимости в заголовочном файле.