https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117267
--- Comment #15 from Stas Sergeev <stsp at users dot sourceforge.net> --- So in this case is this really good to disallow the always_inline attribute? - It just throws the meaningless error. Its meaningless because clang has no such problem, so stating "can never be copied" is plain wrong: it can and clang knows how. - The translation of that error is also wrong. It says: функция «setjmp» не может быть скопирована, поскольку имеют нелокальные переходы в эту функцию It should say: функция «setjmp» не может быть скопирована, поскольку имеютСЯ нелокальные переходы в эту функцию - It complicates the use. You need to use macro and compound statement extension. Also when gcc detects a return after setjmp(), it generates the intentionally bad code. Andrew argues that this is UB anyway, and that's certainly is. But why not to generate an error then, rather than when the properly valid attribute always_inline is used? But gcc choose to generate an error when there is no UB, and generate bad code when there is...