2011-12-03 4 views

Répondre

24

C'est légal et Settings::iterator et Settings::const_iterator sont accessibles à tous les utilisateurs de la classe Settings.

Le contrôle d'accès en C++ est appliqué uniquement aux noms. Il y a une note et un exemple dans ISO/IEC 14882: 2011 11 [class.access]/4 qui indique clairement que c'est l'intention.

[...] [Note: Parce que le contrôle d'accès s'applique aux noms, si le contrôle d'accès est appliqué à un nom de typedef, seule l'accessibilité du nom de typedef lui-même est considéré. L'accessibilité de l'entité référencée par le typedef n'est pas prise en compte. Par exemple,

class A { 
    class B { }; 
public: 
    typedef B BB; 
}; 

void f() { 
    A::BB x; // OK, typedef name A::BB is public 
    A::B y; // access error, A::B is private 
} 

- end note]