Hi Jens,

as far as I understand the notion of "discarded value expression" made it unclear, whether (*nullptr) was UB.

 

According to https://eel.is/c++draft/expr.ref#2

"For the first option (dot), if the id-expression names a static member or an enumerator, the first expression is a discarded-value expression ([expr.context])"

And according to https://eel.is/c++draft/expr.context#2

"In some contexts, an expression only appears for its side effects. Such an expression is called a discarded-value expression."

 

So the result of (*nullptr) was irrelevant with the previous wording, only the side effects mattered. And side effects were mostly intended ones, which had to be fulfilled (e.g. a function being called), it was at least unclear, if just a non-overloaded dereferencing (which would lead to UB for nullptr, but has no effect on any valid target) is a side effect.

The change made it clear that (*nullptr) always leads to UB.

You are saying, it was clear beforehand?

Best,

Sebastian

 

-----Ursprüngliche Nachricht-----
Von: Jens Maurer via Std-Proposals <std-proposals@lists.isocpp.org>
Gesendet: Mo 28.10.2024 07:58
Betreff: Re: [std-proposals] Calling methods on a nullptr
An: std-proposals@lists.isocpp.org;
CC: Jens Maurer <jens.maurer@gmx.net>;

> 2823 made it clear that (*nullptr) is always UB.

What would the result of *nullptr be, with the previous wording?

Jens