[Development] Disavowing the Lakos Rule for Q_ASSERT

Thiago Macieira thiago.macieira at intel.com
Mon Aug 26 21:49:04 CEST 2024


On Monday 26 August 2024 12:27:47 GMT-7 Giuseppe D'Angelo via Development 
wrote:
> Il 26/08/24 19:56, Thiago Macieira ha scritto:
> 
> > I'd like to request Qt code not obey that rule. In my opinion, it's a
> > defect
 in the contract implementation rather than on Qt code. The*pre* 
> > condition indicates something that must be true before the method is
> > called and therefore the method's own noexcept specification does not
> > apply*yet*.
> 
> As far as I've understood, that's only part of the issue. The other part 
> of the issue is that code calling the function may break: if you turn 
> the failed precondition check into an exception, the exception handling 
> will need to bubble it up through code which may not have set up the 
> correct unwinding state -- because it rightfully assumed that no 
> exception would escape out of a noexcept function.

How is that my problem? My code didn't throw. It was the user's action of
 a) turning precondition checks into runtime validations
 b) using exceptions for the runtime validation
 c) violating the precondition

that caused the problem.

In particular, I don't see why (b) should be used at all. A precondition 
violation implies that the state was unexpected at that point. How is an 
exception going to help recovering? That sounds like an exception that would 
bubble up all the way back to main() and at best perform an emergency save of 
state. But all of that is implementable with a termination handler too.
-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Principal Engineer - Intel DCAI Platform & System Engineering
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5152 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/development/attachments/20240826/ac33a872/attachment-0001.bin>


More information about the Development mailing list