Сообщение Re[10]: const reference nullptr от 16.07.2017 11:50
Изменено 16.07.2017 11:59 prezident.mira
Смотрим, что написано по ссылке http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html
Ещё раз смотрим в описание статуса NAD:This document contains the C++ core language issues for which the Committee (J16 + WG21) has decided that no action is required
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 считает что должно быть сказано
На что ему отвечают, что нет, не должно быть undefined, т.к.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.
*p is not an error when p is null unless the lvalue is converted to an rvalue
Так что не врите про "CWG решила, что разыменование нулевого указателя должно быть разрешено".
"No action is required" значит, что "CWG решила, что разыменование нулевого указателя разрешено".
Смотрим, что написано по ссылке http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html
Ещё раз смотрим в описание статуса NAD:This document contains the C++ core language issues for which the Committee (J16 + WG21) has decided that no action is required
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 считает что должно быть сказано
На что ему отвечают, что нет, не должно быть undefined, т.к.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.
*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 это, собственно, разыменование нулевого указателя, разрешено. Именно "разрешено", а не "должно быть разрешено".