xref: /freebsd/contrib/libcxxrt/stdexcept.h (revision 02e9120893770924227138ba49df1edb3896112a)
1 /*
2  * Copyright 2010-2011 PathScale, Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * 1. Redistributions of source code must retain the above copyright notice,
8  *    this list of conditions and the following disclaimer.
9  *
10  * 2. Redistributions in binary form must reproduce the above copyright notice,
11  *    this list of conditions and the following disclaimer in the documentation
12  *    and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
15  * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 /**
28  * stdexcept.h - provides a stub version of <stdexcept>, which defines enough
29  * of the exceptions for the runtime to use.
30  */
31 
32 namespace std
33 {
34 
35 	class exception
36 	{
37 	public:
38 		exception() throw();
39 		exception(const exception&) throw();
40 		exception& operator=(const exception&) throw();
41 		virtual ~exception();
42 		virtual const char* what() const throw();
43 	};
44 
45 
46 	/**
47 	 * Bad allocation exception.  Thrown by ::operator new() if it fails.
48 	 */
49 	class bad_alloc: public exception
50 	{
51 	public:
52 		bad_alloc() throw();
53 		bad_alloc(const bad_alloc&) throw();
54 		bad_alloc& operator=(const bad_alloc&) throw();
55 		~bad_alloc();
56 		virtual const char* what() const throw();
57 	};
58 
59 	/**
60 	 * Bad cast exception.  Thrown by the __cxa_bad_cast() helper function.
61 	 */
62 	class bad_cast: public exception {
63 	public:
64 		bad_cast() throw();
65 		bad_cast(const bad_cast&) throw();
66 		bad_cast& operator=(const bad_cast&) throw();
67 		virtual ~bad_cast();
68 		virtual const char* what() const throw();
69 	};
70 
71 	/**
72 	 * Bad typeidexception.  Thrown by the __cxa_bad_typeid() helper function.
73 	 */
74 	class bad_typeid: public exception
75 	{
76 	public:
77 		bad_typeid() throw();
78 		bad_typeid(const bad_typeid &__rhs) throw();
79 		virtual ~bad_typeid();
80 		bad_typeid& operator=(const bad_typeid &__rhs) throw();
81 		virtual const char* what() const throw();
82 	};
83 
84 	class bad_array_new_length: public bad_alloc
85 	{
86 	public:
87 		bad_array_new_length() throw();
88 		bad_array_new_length(const bad_array_new_length&) throw();
89 		bad_array_new_length& operator=(const bad_array_new_length&) throw();
90 		virtual ~bad_array_new_length();
91 		virtual const char *what() const throw();
92 	};
93 
94 
95 } // namespace std
96 
97