1 : // Exception Handling support header for -*- C++ -*-
2 :
3 : // Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
4 : // 2004, 2005, 2006, 2007
5 : // Free Software Foundation
6 : //
7 : // This file is part of GCC.
8 : //
9 : // GCC is free software; you can redistribute it and/or modify
10 : // it under the terms of the GNU General Public License as published by
11 : // the Free Software Foundation; either version 2, or (at your option)
12 : // any later version.
13 : //
14 : // GCC is distributed in the hope that it will be useful,
15 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : // GNU General Public License for more details.
18 : //
19 : // You should have received a copy of the GNU General Public License
20 : // along with GCC; see the file COPYING. If not, write to
21 : // the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 : // Boston, MA 02110-1301, USA.
23 :
24 : // As a special exception, you may use this file as part of a free software
25 : // library without restriction. Specifically, if other files instantiate
26 : // templates or use macros or inline functions from this file, or you compile
27 : // this file and link it with other files to produce an executable, this
28 : // file does not by itself cause the resulting executable to be covered by
29 : // the GNU General Public License. This exception does not however
30 : // invalidate any other reasons why the executable file might be covered by
31 : // the GNU General Public License.
32 :
33 : /** @file exception
34 : * This is a Standard C++ Library header.
35 : */
36 :
37 : #ifndef __EXCEPTION__
38 : #define __EXCEPTION__
39 :
40 : #pragma GCC visibility push(default)
41 :
42 : #include <bits/c++config.h>
43 :
44 : extern "C++" {
45 :
46 : namespace std
47 : {
48 : /**
49 : * @brief Base class for all library exceptions.
50 : *
51 : * This is the base class for all exceptions thrown by the standard
52 : * library, and by certain language expressions. You are free to derive
53 : * your own %exception classes, or use a different hierarchy, or to
54 : * throw non-class data (e.g., fundamental types).
55 : */
56 : class exception
57 0 : {
58 : public:
59 : exception() throw() { }
60 : virtual ~exception() throw();
61 :
62 : /** Returns a C-style character string describing the general cause
63 : * of the current error. */
64 : virtual const char* what() const throw();
65 : };
66 :
67 : /** If an %exception is thrown which is not listed in a function's
68 : * %exception specification, one of these may be thrown. */
69 : class bad_exception : public exception
70 : {
71 : public:
72 : bad_exception() throw() { }
73 :
74 : // This declaration is not useless:
75 : // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
76 : virtual ~bad_exception() throw();
77 :
78 : // See comment in eh_exception.cc.
79 : virtual const char* what() const throw();
80 : };
81 :
82 : /// If you write a replacement %terminate handler, it must be of this type.
83 : typedef void (*terminate_handler) ();
84 :
85 : /// If you write a replacement %unexpected handler, it must be of this type.
86 : typedef void (*unexpected_handler) ();
87 :
88 : /// Takes a new handler function as an argument, returns the old function.
89 : terminate_handler set_terminate(terminate_handler) throw();
90 :
91 : /** The runtime will call this function if %exception handling must be
92 : * abandoned for any reason. It can also be called by the user. */
93 : void terminate() __attribute__ ((__noreturn__));
94 :
95 : /// Takes a new handler function as an argument, returns the old function.
96 : unexpected_handler set_unexpected(unexpected_handler) throw();
97 :
98 : /** The runtime will call this function if an %exception is thrown which
99 : * violates the function's %exception specification. */
100 : void unexpected() __attribute__ ((__noreturn__));
101 :
102 : /** [18.6.4]/1: "Returns true after completing evaluation of a
103 : * throw-expression until either completing initialization of the
104 : * exception-declaration in the matching handler or entering @c unexpected()
105 : * due to the throw; or after entering @c terminate() for any reason
106 : * other than an explicit call to @c terminate(). [Note: This includes
107 : * stack unwinding [15.2]. end note]"
108 : *
109 : * 2: "When @c uncaught_exception() is true, throwing an %exception can
110 : * result in a call of @c terminate() (15.5.1)."
111 : */
112 : bool uncaught_exception() throw();
113 : } // namespace std
114 :
115 : _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
116 :
117 : /** A replacement for the standard terminate_handler which prints more
118 : information about the terminating exception (if any) on stderr. Call
119 : @code
120 : std::set_terminate (__gnu_cxx::__verbose_terminate_handler)
121 : @endcode
122 : to use. For more info, see
123 : http://gcc.gnu.org/onlinedocs/libstdc++/19_diagnostics/howto.html#4
124 :
125 : In 3.4 and later, this is on by default.
126 : */
127 : void __verbose_terminate_handler ();
128 :
129 : _GLIBCXX_END_NAMESPACE
130 :
131 : } // extern "C++"
132 :
133 : #pragma GCC visibility pop
134 :
135 : #endif
|