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

NAME
     std::logic_error - std::logic_error

Synopsis
	Defined in header <stdexcept>
	class logic_error;

	Defines  a  type  of object to be thrown as exception. It reports errors
     that are a
	consequence of faulty logic within the program such as violating logical
	preconditions or class invariants and may be preventable.

	No standard library components throw this exception  directly,	but  the
     exception
	types std::invalid_argument, std::domain_error, std::length_error,
	std::out_of_range,   std::future_error,  and  std::experimental::bad_op-
     tional_access are
	derived from std::logic_error.

	std-logic error-inheritance.svg

					Inheritance diagram

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

     std::logic_error::logic_error

	logic_error( const std::string& what_arg ); (1)
	logic_error( const char* what_arg );	    (2)
	logic_error( const logic_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::logic_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::logic_error is not permitted to  throw  exceptions,
     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 construct
     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 ob-
     ject and the
	copied object.

     std::logic_error::operator=

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

	Assigns  the  contents with those of other. If *this and other both have
     dynamic type
	std::logic_error then std::strcmp(what(), other.what()) == 0  after  as-
     signment. 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 de-
     fined as long
	as the explanatory strings obtained by what() are the same for the orig-
     inal object
	and the copied object.

     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)

	Defect reports

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

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

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

home | help