xref: /freebsd/contrib/libcxxrt/stdexcept.h (revision 7937bfbc0ca53fe7cdd0d54414f9296e273a518e)
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 #include "cxxabi.h"
33 
34 namespace std
35 {
36 
37 	class exception
38 	{
39 	public:
40 		exception() _LIBCXXRT_NOEXCEPT;
41 		exception(const exception&) _LIBCXXRT_NOEXCEPT;
42 		exception& operator=(const exception&) _LIBCXXRT_NOEXCEPT;
43 		virtual ~exception();
44 		virtual const char* what() const _LIBCXXRT_NOEXCEPT;
45 	};
46 
47 
48 	/**
49 	 * Bad allocation exception.  Thrown by ::operator new() if it fails.
50 	 */
51 	class bad_alloc: public exception
52 	{
53 	public:
54 		bad_alloc() _LIBCXXRT_NOEXCEPT;
55 		bad_alloc(const bad_alloc&) _LIBCXXRT_NOEXCEPT;
56 		bad_alloc& operator=(const bad_alloc&) _LIBCXXRT_NOEXCEPT;
57 		~bad_alloc();
58 		virtual const char* what() const _LIBCXXRT_NOEXCEPT;
59 	};
60 
61 	/**
62 	 * Bad cast exception.  Thrown by the __cxa_bad_cast() helper function.
63 	 */
64 	class bad_cast: public exception {
65 	public:
66 		bad_cast() _LIBCXXRT_NOEXCEPT;
67 		bad_cast(const bad_cast&) _LIBCXXRT_NOEXCEPT;
68 		bad_cast& operator=(const bad_cast&) _LIBCXXRT_NOEXCEPT;
69 		virtual ~bad_cast();
70 		virtual const char* what() const _LIBCXXRT_NOEXCEPT;
71 	};
72 
73 	/**
74 	 * Bad typeidexception.  Thrown by the __cxa_bad_typeid() helper function.
75 	 */
76 	class bad_typeid: public exception
77 	{
78 	public:
79 		bad_typeid() _LIBCXXRT_NOEXCEPT;
80 		bad_typeid(const bad_typeid &__rhs) _LIBCXXRT_NOEXCEPT;
81 		virtual ~bad_typeid();
82 		bad_typeid& operator=(const bad_typeid &__rhs) _LIBCXXRT_NOEXCEPT;
83 		virtual const char* what() const _LIBCXXRT_NOEXCEPT;
84 	};
85 
86 	class bad_array_new_length: public bad_alloc
87 	{
88 	public:
89 		bad_array_new_length() _LIBCXXRT_NOEXCEPT;
90 		bad_array_new_length(const bad_array_new_length&) _LIBCXXRT_NOEXCEPT;
91 		bad_array_new_length& operator=(const bad_array_new_length&) _LIBCXXRT_NOEXCEPT;
92 		virtual ~bad_array_new_length();
93 		virtual const char *what() const _LIBCXXRT_NOEXCEPT;
94 	};
95 
96 
97 } // namespace std
98 
99