Это допустимо, и Settings::iterator
и Settings::const_iterator
доступны всем пользователям класса Settings
.
Контроль доступа в C ++ применяется исключительно к именам.В ИСО / МЭК 14882: 2011 11 есть примечание и пример 11 [class.access] / 4, в котором разъясняется, что это является намерением.
[...] [ Примечание: Поскольку контроль доступа применяется к именам, если контроль доступа применяется к имени typedef, рассматривается только доступность самого имени typedef.Доступность объекта, на который ссылается typedef, не рассматривается.Например,
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
}
- конечная нота ]