title: Access to method pointer to protected method?
body: <p>This code:</p>
  
  <pre><code>class B {
   protected:
    void Foo(){}
  }
  
  class D : public B {
   public:
    void Baz() {
      Foo();
    }
    void Bar() {
      printf("%x\n", &amp;B::Foo);
    }
  }
  </code></pre>
  
  <p>gives this error:</p>
  
  <pre><code>t.cpp: In member function 'void D::Bar()':
  Line 3: error: 'void B::Foo()' is protected
  </code></pre>
  
  <ul>
  <li>Why can I call a protected method but not take its address?</li>
  <li>Is there a way to mark something fully accessible from derived classes rather than only accessible from derived classes <em>and</em> in relation to said derived class?</li>
  </ul>
  
  <hr>
  
  <p>BTW: <a href="https://stackoverflow.com/questions/3628421/calling-protected-method-in-base-class-via-pointer-to-base-class-in-derived-class">This looks related</a> but what I'm looking for a reference to where this is called out in the spec or the like (and hopefully that will lead to how to get things to work the way I was expecting).</p>