title: How init pointer to data of templated ancestor
body: <p>Just a sample code:</p>
  
  <pre><code>template &lt;class T&gt; class TempBase
  {
  protected:
    string m_str;
  };
  
  template &lt;class T&gt; class Temp: public TempBase&lt;T&gt;
  {
  public:
    void method()
    {
      string
          &amp;s = TempBase&lt;T&gt;::m_str //reference works fine
          /*NOTE compile failed:
          error: ‘std::string TempBase&lt;int&gt;::m_str’ is protected
          error: within this context
          error: cannot convert ‘std::string TempBase&lt;int&gt;::* {aka std::basic_string&lt;char&gt; TempBase&lt;int&gt;::*}’ to ‘std::string* {aka std::basic_string&lt;char&gt;*}’ in initialization
          */
        , *ps = &amp;TempBase&lt;T&gt;::m_str 
        , *ps2 = &amp;m_str //compile failed, obviously: ‘m_str’ was not declared in this scope
        , *ps3 = &amp;s //this is workaround, works fine
      ;
    }
  };
  
  void f()
  {
    Temp&lt;int&gt; t;
    t.method();
  }
  </code></pre>
  
  <p>Goal: init pointer of type <code>std::string *</code> with ancestor member <code>TempBase&lt;T&gt;::m_str</code>.</p>
  
  <p>Problem: correct syntax unknown</p>
  
  <p>Comments: previous code contains 2 intentional compile errors:</p>
  
  <ol>
  <li>attempt to convert member pointer to data pointer</li>
  <li>templated ancestry members must be fully qualified</li>
  </ol>
  
  <p>and 1 workaround.</p>
  
  <p>Question: what is a correct syntax in this case to obtain pointer to ancestor data?</p>