http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54289
--- Comment #6 from Dmitry <dmitriy-hshg at mail dot ru> 2012-08-16 19:49:27 UTC --- I think standard of C std libs declares setjmp as a function. So, it should be function. Some code: __BEGIN_NAMESPACE_STD typedef struct __jmp_buf_tag jmp_buf[1]; extern int setjmp (jmp_buf __env) __THROW; __END_NAMESPACE_STD #ifndef __FAVOR_BSD extern int _setjmp (struct __jmp_buf_tag __env[1]) __THROW; # define setjmp(env) _setjmp (env) #else # define setjmp(env) setjmp (env) #endif Do you see that if __FAVOR_BSD is defined then std::setjmp will work? Different behaviours aren't good.