C++ Logo

sg12

Advanced search

Re: [SG12] Missing non-void return on some paths

From: Jonathan Wakely <cxx_at_[hidden]>
Date: Sat, 8 May 2021 20:18:36 +0100
On Sat, 8 May 2021, 19:52 Nevin Liber via SG12, <sg12_at_[hidden]>
wrote:

> On Thu, May 6, 2021 at 6:47 PM JF Bastien via SG12 <sg12_at_[hidden]>
> wrote:
>
>> Compilers diagnose when functions can't be proved to return, and I
>> wouldn't work on a codebase without this diagnostic enabled as an error. Is
>> there a valid reason to keep this UB around?
>>
>
> How does one write an assert-type macro which, when it is disabled, still
> prevents this type of warning/error? Because people do write:
>
> my_assert(false);
>
> to mean abort in debug mode, take my chances in release mode.
>

I think adding std::unreachable(); after the assertion would work for that
purpose. If assertions are enabled, it's true that you'll never get there,
and for release mode, it would be UB to get there (which is the case
already today). Adding unreachable() just tells the compiler not to give a
diagnostic about it.

Received on 2021-05-08 14:18:55