title: Do these two classes violate encapsulation?
body: <pre><code>class X
  {
  protected:
      void protectedFunction() { cout &lt;&lt; "I am protected" ; }
  };
  
  class Y : public X
  {
  public:
      using X::protectedFunction;
  };
  
  int main()
  {
      Y y1;
      y1.protectedFunction();
  }
  </code></pre>
  
  <p>This way I am able to expose one of the functions of the base class.</p>
  
  <ol>
  <li>Doesn't this violate the encapsulation principle?</li>
  <li>Is there a specific reason as to why this is in standard?</li>
  <li>Is there any uses of this, or is it going to be changed in the new standard?</li>
  <li>Are there any open issues related to this in the standard?</li>
  </ol>