Я в настоящее время не понимаю, как операторы 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 ++ управляют разрешением typedef в пространствах имен?