Библиотеки не должны, Приложения могут.
Когда над приложением работают несколько человек, конечно, вам нужны четкие правила, и самое ясное правило - «не». Однако это не идеально во всех случаях.
операторы «using» должны идти только поверх файлов CPP, но не в заголовках, но это усложняет написание шаблонов, поскольку - для большинства компиляторов в ближайшем будущем - они должны находиться в заголовках.
По моему опыту (в основном небольшая команда с большим, но хорошо разбитым на части проектом), загрязнение пространства имен не является большой проблемой, пока вы контролируете соответствующий код и настаиваете на описательных именах. Случаи, которые я помню, были немногочисленны и легко решались. Однако со сторонними библиотеками были серьезные проблемы - даже с доступным источником.
YMMV с огромной командой или огромным проектом, который входит в одну компиляцию.