Я обнаружил проблему, связанную с поиском в пространстве имен.
Не удалось скомпилировать следующий упрощенный код:
namespace A {
namespace B {
class Test {
};
}
namespace C {
namespace B {
typedef B::Test AnAlias;
}
}
}
Компилятор жалуется, что Test в пространстве имен A::C::B
не называет тип.
Похоже, проблема в том, что компилятор видит пространство имен B внутри пространства имен C и не выполняет дальнейший поиск. Я ожидал, что он также посмотрит в пространство имен A (которое является пространством имен) и найдет там B :: Test.
Если я переименую C::B
, то все в порядке.
Если я подхожу A::B::Test
все хорошо.
Если я поместил typedef непосредственно в пространство имен A::C
, то все в порядке.
Это поведение было протестировано с gcc 4.1 и компилятором intel 12. (оба для Linux).
Верны ли компиляторы?