Warum bezieht sich die INVOKE-Funktion im C ++ 11-Standard auf Datenelemente?

$ 20.8.2 des Standards beschreibt die INVOKE-Funktion, mit der hauptsächlich beschrieben wird, wie Callables mit verschiedenen Argumentlisten in der Standardbibliothek aufgerufen werden:

Definieren Sie INVOKE (f, t1, t2, ..., tN) wie folgt:

(t1.*f)(t2, ..., tN) wenn f ein Zeiger auf eine Mitgliedsfunktion einer Klasse T ist und t1 ein Objekt vom Typ T oder eine Referenz auf ein Objekt vom Typ T oder eine Referenz auf ein Objekt eines von T abgeleiteten Typs ist;

((*t1).*f)(t2, ..., tN) wenn f ein Zeiger auf eine Elementfunktion einer Klasse T ist und t1 nicht einer der im vorherigen Punkt beschriebenen Typen ist;

t1.*f wenn N == 1 und f ein Zeiger auf Mitgliedsdaten einer Klasse T ist und t1 ein Objekt vom Typ T oder eine Referenz auf ein Objekt vom Typ T oder eine Referenz auf ein Objekt eines von T abgeleiteten Typs ist;

(*t1).*f wenn N == 1 und f ein Zeiger auf Mitgliedsdaten einer Klasse T ist und t1 nicht einer der im vorhergehenden Punkt beschriebenen Typen ist;

f(t1, t2, ..., tN) in allen anderen Fällen.

Wofür sind der dritte und der vierte Gegenstand? Soweit ich das beurteilen kann, rufen sie nicht anf selbst wennf ist aufrufbar. Was ist der Benutzerfall für sie. Vielleicht ist es ein Tippfehler im Standard und*f() war beabsichtigt?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage