$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [outcome] success-or-failure objects
From: Gavin Lambert (gavinl_at_[hidden])
Date: 2018-01-23 22:30:27
On 24/01/2018 10:25, Niall Douglas wrote:
> I'd now go so far as to assert - not even claim - that if you're
> throwing logic-error-type-exceptions in brand new C++ 14 or 17 library
> code, you're doing something very wrong. It's a design pattern which
> imposes considerable costs on your users, and for very little gain when
> there are so many better alternatives available in today's tooling and
> support libraries.
> 
> Cue now some of said sizeable number of people who think that I am dead
> wrong on that assertion ...
I don't think you're wrong, but I do think you have the rose-tinted 
glasses on a little too tightly.
For libraries that have the luxury of building cross-platform and 
running UBSan, sure.
For large applications that want to use those libraries and contain too 
many Windows-isms to build with UBSan, *especially* in domains where 
crashing the process has significant (though not life threatening to the 
point of requiring certification) consequences, having the option to 
throw an exception on precondition violation seems preferable to more 
subtle UB issues.
BOOST_ASSERT seems like a good compromise on that front; it can be 
configured to assert in debug mode and either vanish entirely in release 
mode (for the folks who can rely on UBSan) or throw exceptions (for 
everyone else).  Policies like Outcome has can be even better, but take 
more work to get right, and sometimes don't put the knobs in the right 
places when used indirectly.