Я в настоящее время путаюсь с тем, как операторы using (namespace) работают в C ++.
У меня есть:
//somewhere in included headers
typedef unsigned int uint;
namespace mine {
typedef unsigned int uint;
}
namespace other {
using namespace mine;
void foobar () {
uint offender = i;
}
}
Результаты в (перефразированном):
ссылка на «uint» неоднозначна.
кандидаты
typedef unsigned int uint
и
typedef unsigned int mine :: uint
Тем временем, когда я делаю
namespace other {
using namespace mine;
using mine::uint;
void foobar () {
uint offender = i;
}
}
Все отлично работает.
Мне кажется странным, что «используя идентификатор ;» изменяет видимость другого определения typedef (скрывает глобальное определение?).
Может кто-нибудь указать мне, какие правила в C ++ определяют разрешение typedefs в пространствах имен?