Почему компилятор C ++ не может различать унаследованный общедоступный и унаследованный частный метод с тем же именем?

Я не понимаю, почему компилятор C ++ не примет это:

  class Foo { 
    private: void Baz() { }
  };

  class Bar {
    public: void Baz() { 
  };

  class FooBar : public Foo, public Bar { };

  void main() {
    FooBar fb;
    fb.Baz();
  }

gcc выдает ошибку:

 request for member ‘Baz’ is ambiguous
 candidates are: void Bar::Baz()
                 void Foo::Baz()

, но разве не очевидно, что я хочу Bar :: Baz (), поскольку Foo :: Baz () является закрытым? Почему компилятор не устраняет неоднозначность здесь?

6
задан Justin L. 26 August 2011 в 19:40
поделиться