title: a const member function, returning a pointer to a non const member variable, why would it be good?
body: <p>I work in a large collaboration (of mostly non-professional programmers, I being one of them). I regularly see examples of the following</p>
  
  <pre><code>void T::DoChanges(I i); // will make changes to internal structure of T (non-const)
  V T::GetValue();
  
  class A
  {
  private:
    T* fMember;
  public:
    A(); 
    T* GetMember() const {return fMember;}
  }
  </code></pre>
  
  <p>, Where a use-case would be</p>
  
  <pre><code>A a;
  I i;
  a-&gt;GetMember()-&gt;DoChanges(i);
  V v = a-&gt;GetMember()-&gt;GetValue();
  </code></pre>
  
  <p>This practice violates a tenant drilled into me when i took programming courses, i.e. that const refers not only to the bitwise structure of the class instance, but the internal logical structure. 
  Under this philosophy, the member function should take the following forms:</p>
  
  <pre><code>T* GetMember() {return fMember;}
  const T* GetMember() const {return fMember;}
  </code></pre>
  
  <p>I have heard that some people think that const should only refer to members, speaking strictly using the c++ terminology. How/why would someone argue for this type of practice?</p>