Информация об изменениях

Сообщение Re[10]: const reference nullptr от 16.07.2017 11:50

Изменено 16.07.2017 11:59 prezident.mira

Re[10]: const reference nullptr
NI>И что? CWG решила, что разыменование нулевого указателя должно быть разрешено, но официального (закреплённого в стандарте) описания поведения программы при таком разыменовании (кроме специального случая с typeid) по-прежнему нет.

Смотрим, что написано по ссылке http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html

This document contains the C++ core language issues for which the Committee (J16 + WG21) has decided that no action is required

Ещё раз смотрим в описание статуса NAD:

The working group has reached consensus that the issue is not a defect in the Standard. A Rationale statement describes the working group's reasoning.


О чём говорит issue №315, про который сказано, что это not a defect? Про то, что про обращение к не-статической функции-члену класса через нулевой указатель явно сказано, что оно undefined, а про обращение к статической не сказано undefined, но, автор issue считает что должно быть сказано

If f is static, however, there seems to be no such rule, and the call is only undefined if the dereference implicit in the -> operator is undefined. IMO it should be.

На что ему отвечают, что нет, не должно быть undefined, т.к.

*p is not an error when p is null unless the lvalue is converted to an rvalue



Так что не врите про "CWG решила, что разыменование нулевого указателя должно быть разрешено".
"No action is required" значит, что "CWG решила, что разыменование нулевого указателя разрешено".
Re[10]: const reference nullptr
NI>И что? CWG решила, что разыменование нулевого указателя должно быть разрешено, но официального (закреплённого в стандарте) описания поведения программы при таком разыменовании (кроме специального случая с typeid) по-прежнему нет.

Смотрим, что написано по ссылке http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html

This document contains the C++ core language issues for which the Committee (J16 + WG21) has decided that no action is required

Ещё раз смотрим в описание статуса NAD:

The working group has reached consensus that the issue is not a defect in the Standard. A Rationale statement describes the working group's reasoning.


О чём говорит issue №315, про который сказано, что это not a defect? Про то, что про обращение к не-статической функции-члену класса через нулевой указатель явно сказано, что оно undefined, а про обращение к статической не сказано undefined, но, автор issue считает что должно быть сказано

If f is static, however, there seems to be no such rule, and the call is only undefined if the dereference implicit in the -> operator is undefined. IMO it should be.

На что ему отвечают, что нет, не должно быть undefined, т.к.

*p is not an error when p is null unless the lvalue is converted to an rvalue



Так что не врите про "CWG решила, что разыменование нулевого указателя должно быть разрешено".
No action по внесению изменений, говорящих об UB в случае доступа через нулевой указатель к статической функции, is required, потому что отсутствие этого в стандарте not a defect, т.к. просто разыменование нулевого указателя, которое происходит при вычислении выражения вида E1.E2, где E2 обозначает статический член, а E1 это, собственно, разыменование нулевого указателя, разрешено. Именно "разрешено", а не "должно быть разрешено".