Es legal y Settings::iterator
y son accesibles para todos los usuarios de la clase Settings
.
El control de acceso en C++ se aplica únicamente a los nombres. Hay una nota y un ejemplo en ISO/IEC 14882: 2011 11 [class.access]/4 que deja en claro que esta es la intención.
[...] [Nota: Debido a de control de acceso se aplica a los nombres, si el control de acceso es aplicado a un nombre typedef, sólo la accesibilidad del mismo nombre typedef se considera. La accesibilidad de la entidad a la que hace referencia typedef no se considera. Por ejemplo,
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
}
- nota final]