std::jmp_buf(3)

NAME
std::jmp_buf - std::jmp_buf

Synopsis
   Defined in header <csetjmp>
   typedef /* unspecified */ jmp_buf;
   The std::jmp_buf type is an array type suitable for storing information to restore a
   calling environment. The stored information is sufficient to restore execution at
   the correct block of the program and invocation of that block. The state of
   floating-point status flags, or open files, or any other data is not stored in an
   object of type jmp_buf.

Example
// Run this code
 #include <iostream>
 #include <csetjmp>
 std::jmp_buf my_jump_buffer;
 [[noreturn]] void foo(int count)
 {
     std::cout << "foo(" << count << ") called\n";
     std::longjmp(my_jump_buffer, count+1); // setjmp() will return count+1
 }
 int main()
 {
     volatile int count = 0; // modified locals in setjmp scope must be volatile
     if (setjmp(my_jump_buffer) != 5) { // equality against constant expression in an if
         count = count + 1; // ++count, count += 1, etc on 'volatile'-qualified
                        // left operand are deprecated since C++20 (P1152)
         foo(count); // This will cause setjmp() to exit
     }
 }

Output:
 foo(1) called
 foo(2) called
 foo(3) called
 foo(4) called

See also
   setjmp saves the context
           (function macro)
   longjmp jumps to specified location
           (function)