title: stopping a `const` member from being edited under another alias
body: <p>I have a class with an <code>const</code> abstract member. Since it is abstract, the object must reside in a higher scope. However, it may be edited in this higher scope. I have made this MWE, and added comments explaining what I am trying to achieve (.i.e. I know this does NOT achieve what I want).</p>
  
  <p>Besides commenting the hell out of it, what can be done to stop the user from editing the object. Preferably, an idiot proof method (optimally, compile error)</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  class Foo
  {
      private:
          const int * p_abstract_const;   
          //int my application this is a pointer to abstract object
      public:
          Foo(const int * p_new_concrete_const)
          {
              p_abstract_const  = p_new_concrete_const;
          }
  
          void printX()
          {
              std::cout &lt;&lt; *p_abstract_const &lt;&lt; std::endl;
          }
  };
  
  int main()
  {
      int concrete_nonconst = 666;
      Foo foo(&amp;concrete_nonconst);    // I want this NOT to compile
    //const int concrete_const(1);
    //Foo foo(&amp;concrete_const);       // only this should compile 
      foo.printX();
      concrete_nonconst=999;          // so that this will NOT be possible
      foo.printX();
  
  }
  </code></pre>