Я знаю, что область действия директивы using ограничена блоком или функцией при вводе. Тогда он будет применяться только к этой области. Но если блок является namespace
, он автоматически применяется ко всем блокам одного и того же пространства имен. Это верно? По крайней мере, следующий пример показывает, что: (http://ideone.com/K8dk7E)Сфера использования `namespace` в другом пространстве имен
namespace N1
{
struct Foo{};
}
namespace N2
{
using namespace N1;
Foo f;
}
namespace N2
{
Foo f2;
}
int main()
{
N2::f2;
}
я ожидал Foo f2
дать ошибку, так как Foo
должна быть неизвестна. Итак, мой реальный вопрос: есть ли инструкция using
в блоке пространства имен, действующем для всех блоков одного и того же пространства имен?
Это вызывает проблемы, когда все файлы cpp включены и скомпилированы вместе, поскольку они загрязняют другие файлы cpp, которые не должны содержать другое пространство имен (тот, для которого задана директива using). Таким образом, это может вызвать нежелательные конфликты.
Вы спрашиваете, будут ли элементы N1 видны в расширении-namespace-определении N2? – SingerOfTheFall
Мне кажется, что приведенный вами пример не очень хорошо иллюстрирует вашу проблему. С SUC код в сообщении компилируется просто отлично. – StoryTeller
Вы уверены, что это не просто проблема с заказом, в который включены отдельные файлы? – StoryTeller