У меня есть следующий набор классов (минимальная репликация моей реальной ситуации):
namespace Parent
{
class A {};
namespace Nested
{
class A {};
}
template <typename T>
class B
{
A myA;
};
}
Я ожидаю, что элемент Parent::B::myA должен быть однозначно разрешен как относящийся к типу Parent::A. Однако в другом месте моего проекта у меня есть это:
namespace Parent
{
using namespace Nested;
void foo()
{
B<int> myB;
}
}
который не компилируется под MSVC 2003:
error C2872: 'A' : ambiguous symbol
could be 'Test.cpp(5) : Parent::A'
or 'Test.cpp(9) : Parent::Nested::A'
Test.cpp(26) : see reference to class template instantiation 'Parent::B<T>' being compiled
with [ T=int ]
Код будет скомпилирован, если я укажу явно в своем объявлении B::myA, то есть Parent::A myA;. Однако код компилируется в соответствии с gcc-4.3.4. Является ли это просто ошибкой MSVC 2003, или мне действительно нужно беспокоиться о том, в какой области могут создаваться экземпляры моих шаблонов?