Uma diretiva de uso em um espaço para nome detalhado é problemática?
Considere este cabeçalho da biblioteca:
#include<vector>
#include<algorithm>
#include<iostream>
namespace Lib {
namespace detail {
using namespace std;
template<class T>
void sort_impl(istream &in,ostream &out) {
vector<T> v;
{
int n;
in >> n;
v.resize(n);
}
for(auto &i : v) cin >> i;
sort(v.begin(),v.end());
for(auto i : v) out << i << endl;
}
}
inline void sort_std() {
detail::sort_impl<int>(std::cin,std::cout);
}
}
Odetail
O namespace isola com êxito os clientes da biblioteca (e o restante da implementação da biblioteca) dousando-diretiva neste exemplo? Não estou interessado na discussão emPor que "usar o namespace std" é considerado uma má prática?, mesmo que alguns dos argumentos se apliquem mesmo a "bem contido"usando diretivas.
Observe que existem duas perguntas existentes sobre a mesma situação, mas comusing-declarações:
Usando diretiva em arquivos de cabeçalho no espaço para nome privado (apesar do título)Maneira elegante de evitar envenenamento de espaço para nome em C ++ (cuja única resposta é realmente uma resposta à pergunta "má prática" acima)Isso poderia ser combinado com qualquer um deles, mas a edição seria severa.