Да и нет.
Имя класса Foo
в namespace1
равно "namespace1 :: Foo"
Имя класса Foo
в namespace2
is "namespace2 :: Foo"
Эти имена не идентичны - вы не можете иметь два одинаково именованных класса в разных пространствах имен.
Очевидно, что оба имеют локальное имя "Foo", и если вы сделаете что-то вроде
using namespace namespace1;
using namespace namespace2;
Foo x;
, тогда будет двусмысленность, как вы сказали компилятору игнорировать разныенемного имен.
Но пока вы не включите оба в область действия, вы можете использовать полное имя, чтобы использовать любое из них по своему желанию.