title: std::add_pointer implementation for non-static member functions
body: <p>This question is a follow-up of <a href="https://stackoverflow.com/questions/57506069/a-question-regarding-the-implementation-of-stdadd-pointer">A question regarding the implementation of std::add_pointer
  </a></p>
  
  <p>Under <a href="https://en.cppreference.com/w/cpp/types/add_pointer" rel="nofollow noreferrer">std::add_pointer</a></p>
  
  <p>there is the following reference:</p>
  
  <blockquote>
    <p>Otherwise (if T is a cv- or ref-qualified function type), provides the
    member typedef type which is the type T.</p>
  </blockquote>
  
  <p>Based on reading <a href="https://en.cppreference.com/w/cpp/language/member_functions" rel="nofollow noreferrer">Non-static member functions: const-, volatile-, and ref-qualified member functions</a>, my understanding is that a for a non-static member function with given <code>cv</code>and/or <code>ref</code> qualification,</p>
  
  <p>a) the <code>cv</code> qualification of the function applies to the <code>this</code> pointer as well, within the scope of the function</p>
  
  <p>b) the <code>ref</code> qualification of the function does not apply to the <code>this</code> pointer within the scope of the function</p>
  
  <p>Given this, why is it that <code>std::add_pointer</code> cannot provide the member <code>typedef</code> <code>type</code> <code>T*</code> in the case of a non-static member function with <code>cv</code> or <code>ref</code> qualification?</p>