Hi Lionel, On Sun, Jul 30, 2017 at 07:53:21PM +0200, Lionel Elie Mamane <[email protected]> wrote: > On Sun, Jul 30, 2017 at 07:26:02PM +0200, Lionel Elie Mamane wrote: > > > Consider: > > > enum t {a, b}; > > > > OUString f(t i) > > { > > switch(i) > > { > > case t::a; > > return "it was an a"; > > case t::b; > > return "it was a b"; > > } > > } > > > > > gcc -Werror fails with > > error: control reaches end of non-void function [-Werror=return-type] > > An Internet search > https://stackoverflow.com/questions/33607284/control-reaches-end-of-non-void-function-with-fully-handled-case-switch-over-a > teaches me that it is legal to construct a value of an enum type that > is not among the enumerated values (when the number of enumerated > values is not a power of two). <sigh> > > I added the fake return. I prefer not to put a default case in the > switch, so that the "switch is not exhaustive over enum" warning can > still appear.
sal/osl/all/compat.cxx uses:
for (;;) { std::abort(); }
to avoid such cases. If this is a common pattern in the codebase, maybe
it can be extracted to a named macro, something like SAL_UNREACHABLE,
which translates to __builtin_unreachable() for gcc/clang, and perhaps
there is an MSVC equivalent.
Regards,
Miklos
signature.asc
Description: Digital signature
_______________________________________________ LibreOffice mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice
