pointer check in unit tests

Michael Stahl mst at libreoffice.org
Thu Nov 5 09:09:30 UTC 2020


On 03.11.20 10:21, Stephan Bergmann wrote:
> On 03/11/2020 09:37, Miklos Vajna wrote:
>> (If you see a case where a pointer is returned and it can't be ever
>> nullptr, then we should fix the return type to a be reference. Caolan
>> did lots of fixes like that recently.)
> 
> That's up for debate.  For example, if a sufficiently large fraction of 
> call sites wants a pointer, it can be awkward to change a function's 
> return type from pointer to reference.  (And doing so without carefully 
> auditing all call sites can silently introduce regressions.)
> 
> T& is something rather different than T* plus "cannot be null".  Just as 
> the C++ type system isn't capable of expressing the type "int, but never 
> 42", it isn't capable of expressing the type "T*, but never nullptr".

on a related note, i've heard it claimed that you can have a "T&, but 
can be null" type in modern C++, as 
std::optional<std::reference_wrapper<T>>.

although with ergonomics like

     std::optional<std::reference_wrapper<Foo>> foo(...);
     foo->get().member;

i'm not sure how seriously to take such claims.


More information about the LibreOffice mailing list