Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::overflow_error(3)	      C++ Standard Libary	std::overflow_error(3)

NAME
       std::overflow_error - std::overflow_error

Synopsis
	  Defined in header <stdexcept>
	  class	overflow_error;

	  Defines  a  type of object to	be thrown as exception.	It can be used
       to report
	  arithmetic overflow errors (that is, situations where	a result of  a
       computation is
	  too large for	the destination	type).

	  The  only  standard  library component that throws this exception is
       (until C++11)
	  std::bitset::to_ulong.
	  The only standard library components that throw this	exception  are
       (since C++11)
	  std::bitset::to_ulong	and std::bitset::to_ullong.

	  The mathematical functions of	the standard library components	do not
       throw this
	  exception  (mathematical  functions report overflow errors as	speci-
       fied in
	  math_errhandling). Third-party libraries, however, use this. For ex-
       ample, boost.math
	  throws std::overflow_error if	 boost::math::policies::throw_on_error
       is enabled (the
	  default setting).

	  std-overflow error-inheritance.svg

					  Inheritance diagram

Member functions
	  constructor	 constructs a new overflow_error object	with the given
       message
			(public	member function)
	  operator=	replaces the overflow_error object
			(public	member function)

       std::overflow_error::overflow_error

	  overflow_error( const	std::string& what_arg ); (1)
	  overflow_error( const	char* what_arg );	 (2)
	  overflow_error( const	overflow_error&	other ); (3)  (noexcept	 since
       C++11)

	  1)  Constructs  the  exception  object  with what_arg	as explanatory
       string. After
	  construction,	std::strcmp(what(), what_arg.c_str()) == 0.
	  2) Constructs	the exception  object  with  what_arg  as  explanatory
       string. After
	  construction,	std::strcmp(what(), what_arg) == 0.
	  3)  Copy  constructor.  If  *this  and  other	both have dynamic type
       std::overflow_error
	  then std::strcmp(what(), other.what()) == 0.	No  exception  can  be
       thrown from the
	  copy constructor.

Parameters
	  what_arg - explanatory string
	  other	   - another exception object to copy

Exceptions
	  1,2) May throw std::bad_alloc.

Notes
	  Because copying std::overflow_error is not permitted to throw	excep-
       tions, this
	  message  is  typically  stored  internally as	a separately-allocated
       reference-counted
	  string.  This	 is  also  why	there	is   no	  constructor	taking
       std::string&&: it would have
	  to copy the content anyway.

	  Before the resolution	of LWG issue 254, the non-copy constructor can
       only accept
	  std::string.	It makes dynamic allocation mandatory in order to con-
       struct a
	  std::string object.

	  After	the resolution of LWG issue 471, a derived standard  exception
       class must have
	  a publicly accessible	copy constructor. It can be implicitly defined
       as long as the
	  explanatory strings obtained by what() are the same for the original
       object and the
	  copied object.

       std::overflow_error::operator=

	  overflow_error& operator=( const overflow_error& other );  (noexcept
       since C++11)

	  Assigns  the	contents  with those of	other. If *this	and other both
       have dynamic type
	  std::overflow_error then std::strcmp(what(), other.what()) ==	0  af-
       ter assignment. No
	  exception can	be thrown from the copy	assignment operator.

Parameters
	  other	- another exception object to assign with

Return value
	  *this

Notes
	  After	 the resolution	of LWG issue 471, a derived standard exception
       class must have
	  a publicly accessible	copy assignment	operator. It can be implicitly
       defined as long
	  as the explanatory strings obtained by what()	are the	same  for  the
       original	object
	  and the copied object.

       Inherited from std::runtime_error

       Inherited from std::exception

Member functions
	  destructor   destroys	the exception object
	  [virtual]    (virtual	public member function of std::exception)
	  what	       returns an explanatory string
	  [virtual]    (virtual	public member function of std::exception)

Example
       // Run this code

	#include <iostream>
	#include <limits>
	#include <stdexcept>
	#include <utility>

	template<typename T, int N>
	    requires (N	> 0) /*...*/
	class Stack
	{
	    int	top_{-1};
	    T data_[N];

	public:
	    [[nodiscard]] bool empty() const { return top_ == -1; }

	    void push(T	x)
	    {
		if (top_ == N -	1)
		    throw std::overflow_error("Stack overflow!");
		data_[++top_] =	std::move(x);
	    }

	    void pop()
	    {
		if (empty())
		    throw std::underflow_error("Stack underflow!");
		--top_;
	    }

	    T const& top() const
	    {
		if (empty())
		    throw std::overflow_error("Stack is	empty!");
		return data_[top_];
	    }
	};

	int main()
	{
	    Stack<int, 4> st;

	    try
	    {
		[[maybe_unused]] auto x	= st.top();
	    }
	    catch (std::overflow_error const& ex)
	    {
		std::cout << "1) Exception: " << ex.what() << '\n';
	    }

	    st.push(1337);
	    while (!st.empty())
		st.pop();

	    try
	    {
		st.pop();
	    }
	    catch (std::underflow_error	const& ex)
	    {
		std::cout << "2) Exception: " << ex.what() << '\n';
	    }

	    try
	    {
		for (int i{}; i	!= 13; ++i)
		    st.push(i);
	    }
	    catch (std::overflow_error const& ex)
	    {
		std::cout << "3) Exception: " << ex.what() << '\n';
	    }
	}

Output:
	1) Exception: Stack is empty!
	2) Exception: Stack underflow!
	3) Exception: Stack overflow!

	  Defect reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	    DR	   Applied  to	      Behavior as published		  Cor-
       rect behavior
	  LWG 254 C++98	     the constructor accepting const	  added
			     char* was missing
			     the explanatory strings of		  they are the
       same as that of
	  LWG 471 C++98	     std::overflow_error's		  the
			     copies  were  implementation-defined     original
       std::overflow_error
								  object

http://cppreference.com		  2024.06.10		std::overflow_error(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::overflow_error&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help