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 std::jmp_buf.
Example
Run this code
#include<array>#include<cmath>#include<csetjmp>#include<cstdlib>#include<format>#include<iostream>std::jmp_bufsolver_error_handler;std::array<double,2>solve_quadratic_equation(doublea,doubleb,doublec){constdoublediscriminant=b*b-4.0*a*c;if(discriminant<0)std::longjmp(solver_error_handler,true);// Go to error handlerconstdoubledelta=std::sqrt(discriminant)/(2.0*a);constdoubleargmin=-b/(2.0*a);return{argmin-delta,argmin+delta};}voidshow_quadratic_equation_solution(doublea,doubleb,doublec){std::cout<<std::format("Solving {}x² + {}x + {} = 0...\n",a,b,c);auto[x_0,x_1]=solve_quadratic_equation(a,b,c);std::cout<<std::format("x₁ = {}, x₂ = {}\n\n",x_0,x_1);}intmain(){if(setjmp(solver_error_handler)){// Error handler for solverstd::cout<<"No real solution\n";returnEXIT_FAILURE;}for(auto[a,b,c]:{std::array{1,-3,2},{2,-3,-2},{1,2,3}})show_quadratic_equation_solution(a,b,c);returnEXIT_SUCCESS;}Output:
Solving 1x² + -3x + 2 = 0... x₁ = 1, x₂ = 2 Solving 2x² + -3x + -2 = 0... x₁ = -0.5, x₂ = 2 Solving 1x² + 2x + 3 = 0... No real solution See also