Разрешение области для создания экземпляра шаблона

У меня есть следующий набор классов (минимальная репликация моей реальной ситуации):

namespace Parent
{
  class A {};

  namespace Nested
  {
    class A {};
  }

  template 
  class B
  {
    A myA;
  };
}

Я ожидал, что член Parent: : B :: myA должен иметь однозначное разрешение иметь тип Parent :: A . Однако в другом месте моего проекта у меня есть следующее:

namespace Parent
{
  using namespace Nested;

  void foo()
  {
    B 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' being compiled
        with [ T=int ]

Код будет компилироваться, если я явно укажу в своем объявлении B :: myA , то есть ] Родитель :: A myA; . Однако код компилируется как в gcc-4.3.4 . Это просто ошибка MSVC 2003, или мне действительно нужно беспокоиться о масштабах, в которых могут быть созданы экземпляры моих шаблонов?

6
задан atkins 23 November 2011 в 13:12
поделиться