разрешение typedef в пространствах имен

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

9
задан Marcin K 17 February 2011 в 22:28
поделиться