typedef résolution à travers les espaces de noms

Je suis actuellement en train de confondre avec la voie "à l'aide de (espace de noms)" les déclarations en C++.

J'ai:

//somewhere in included headers
typedef unsigned int uint;

namespace mine {
    typedef unsigned int uint;
}
namespace other {
    using namespace mine;
    void foobar () {
        uint offender = i;
    }
}

Résultats (paraphrasé):
référence à la "uint" est ambigu.
les candidats sont
typedef unsigned int uint

typedef unsigned int mine::uint

Pendant ce temps, quand je ne

namespace other {
    using namespace mine;
    using mine::uint;

    void foobar () {
        uint offender = i;
    }
}

Tout fonctionne bien.
Il me semble étrange que "l'utilisation de identificateur;" les changements de la visibilité des autres typedef définition (cache le mondial?).
Quelqu'un peut-il m'indiquer quel genre de règles en C++ régissent la résolution des typedefs à travers les espaces de noms?

Espace de noms une déclaration rendue visible grâce à une aide de la directive (par opposition à une déclaration using) apparaît en est une copie exacte de la question Exceptionnel C++[Bug]?

OriginalL'auteur Marcin K | 2011-02-17