title: Why does INVOKE facility in the C++11 standard refer to data members?
body: <p>$ 20.8.2 of the standard describes the INVOKE facility that is mostly used to describe how callables are called with variadic argument lists throughout the standard library:</p>
  
  <blockquote>
    <p>Define INVOKE (f, t1, t2, ..., tN) as follows:</p>
    
    <p>— <code>(t1.*f)(t2, ..., tN)</code> when f is a pointer to a member function of a class T and t1 is an object of
    type T or a reference to an object of type T or a reference to an object of a type derived from T;</p>
    
    <p>— <code>((*t1).*f)(t2, ..., tN)</code> when f is a pointer to a member function of a class T and t1 is not one of
    the types described in the previous item;</p>
    
    <p>— <code>t1.*f</code> when N == 1 and f is a pointer to member data of a class T and t1 is an object of type T or a
    reference to an object of type T or a reference to an object of a type derived from T;</p>
    
    <p>— <code>(*t1).*f</code> when N == 1 and f is a pointer to member data of a class T and t1 is not one of the types
    described in the previous item;</p>
    
    <p>— <code>f(t1, t2, ..., tN)</code> in all other cases.</p>
  </blockquote>
  
  <p>What are the third and the fourth item for? As far as I can tell, they don't call <code>f</code> even if <code>f</code> is callable. What's the user case for them. Maybe it's a typo in the standard and <code>*f()</code> was intended?</p>