Почему средство INVOKE в стандарте C ++ 11 относится к элементам данных?
$ 20.8.2 стандарта описывает средство INVOKE, которое в основном используется для описания того, как вызываемые вызовы вызываются списками аргументов с переменным числом по всей стандартной библиотеке:
Define INVOKE (f, t1, t2, ..., tN) as follows:
— (t1.*f)(t2, ..., tN)
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;
— ((*t1).*f)(t2, ..., tN)
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;
— t1.*f
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;
— (*t1).*f
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;
— f(t1, t2, ..., tN)
in all other cases.
Для чего нужен третий и четвертый пункт? Насколько я могу судить, они не звонятf
даже еслиf
вызывается. Каков пользовательский случай для них. Может быть, это опечатка в стандарте и*f()
был предназначен?