https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43943
Stefan <kdevel at vogtner dot de> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kdevel at vogtner dot de --- Comment #8 from Stefan <kdevel at vogtner dot de> --- (In reply to Jonathan Wakely from comment #4) > There are cases which are either not diagnosable or cannot be > written, such as this example from Doug Gregor: > > in generic code, there might not be a way to create a value with the > appropriate type. For example: > > template<typename T> > T maybe_call(std::function<T(void)> f) { > if (f) > return f(); > else > abort_program(); > > // Cannot write a return here, because we have no way to > create a value of type 'T' > } One can of course write a return there: template<typename T> T maybe_call(std::function<T(void)> f) { if (f) return f(); else abort_program(); // Cannot write a return here, because we have no way to create a value of type 'T' return f(); } which refactors nicely into template<typename T> T maybe_call(std::function<T(void)> f) { if (! f) abort_program(); return f(); }