Come può il operator()
di un lambda essere dichiarato come noreturn
?Come dichiarare un operatore lambda() come noreturn?
Ideone accetta il seguente codice:
#include <cstdlib>
int main() {
[]() [[noreturn]] { std::exit(1); }();
return 0;
}
Clang 3,5 respinge con:
error: 'noreturn' attribute cannot be applied to types
Si può provare in Godbolt: http://goo.gl/vsuCsF
Quale è giusto?
Aggiornamento: le sezioni standard pertinenti sembrano essere 5.1.2.5, 7.6.3, 7.6.4 ma dopo la lettura non è ancora al 100% chiaro per me (i) qual è il comportamento corretto, (ii) come contrassegnare l'operatore() di una lambda come noreturn
.
cioè, non c'è modo di usare attributi sull'operatore() di un lambda? – gnzlbg
@gnzlbg No, non c'è modo. –
@ T.C. C'è qualche ragione per questo, o il comitato non ci ha pensato. Ci sono state proposte per risolvere questo problema? – user877329