понял: https://godbolt.org/z/RE8SfR 
                  
                  
                  
                  
                  
                  Почему оно компилируется без ошибок?
                  
                  
                  
                  
                  
                  class Foo {
                  
                  
                      struct Bar {int b;};
                  
                  
                  public:
                  
                  
                      Bar b() {return {13};}
                  
                  
                  };
                  
                  
                  
                  
                  
                  int main() {
                  
                  
                      Foo f;
                  
                  
                      auto a = f.b();
                  
                  
                      return a.b;
                  
                  
                  }
                  
                  
                  
                  
                  
                  Получается, что приватные типы - это просто типы у которых нет имени вне их области видимости (точнее их имя генерируется автоматически и его не угадать)?
                  
                  
                
Access checking происходит когда вы обращаетесь к Foo::b() и Foo::Bar::b, обе сущности public.
Обсуждают сегодня