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, 2008, 2009, 2010, 2011 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 3, 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 // Under Section 7 of GPL version 3, you are granted additional 20 // permissions described in the GCC Runtime Library Exception, version 21 // 3.1, as published by the Free Software Foundation. 22 23 // You should have received a copy of the GNU General Public License and 24 // a copy of the GCC Runtime Library Exception along with this program; 25 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 26 // <http://www.gnu.org/licenses/>. 27 28 /** @file exception 29 * This is a Standard C++ Library header. 30 */ 31 32 #ifndef __EXCEPTION__ 33 #define __EXCEPTION__ 34 35 #pragma GCC system_header 36 37 #pragma GCC visibility push(default) 38 39 #include <bits/c++config.h> 40 41 extern "C++" { 42 43 namespace std 44 { 45 /** 46 * @defgroup exceptions Exceptions 47 * @ingroup diagnostics 48 * 49 * Classes and functions for reporting errors via exception classes. 50 * @{ 51 */ 52 53 /** 54 * @brief Base class for all library exceptions. 55 * 56 * This is the base class for all exceptions thrown by the standard 57 * library, and by certain language expressions. You are free to derive 58 * your own %exception classes, or use a different hierarchy, or to 59 * throw non-class data (e.g., fundamental types). 60 */ 61 class exception 62 { 63 public: 64 exception() throw() { } 65 virtual ~exception() throw(); 66 67 /** Returns a C-style character string describing the general cause 68 * of the current error. */ 69 virtual const char* what() const throw(); 70 }; 71 72 /** If an %exception is thrown which is not listed in a function's 73 * %exception specification, one of these may be thrown. */ 74 class bad_exception : public exception 75 { 76 public: 77 bad_exception() throw() { } 78 79 // This declaration is not useless: 80 // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 81 virtual ~bad_exception() throw(); 82 83 // See comment in eh_exception.cc. 84 virtual const char* what() const throw(); 85 }; 86 87 /// If you write a replacement %terminate handler, it must be of this type. 88 typedef void (*terminate_handler) (); 89 90 /// If you write a replacement %unexpected handler, it must be of this type. 91 typedef void (*unexpected_handler) (); 92 93 /// Takes a new handler function as an argument, returns the old function. 94 terminate_handler set_terminate(terminate_handler) throw(); 95 96 /** The runtime will call this function if %exception handling must be 97 * abandoned for any reason. It can also be called by the user. */ 98 void terminate() throw() __attribute__ ((__noreturn__)); 99 100 /// Takes a new handler function as an argument, returns the old function. 101 unexpected_handler set_unexpected(unexpected_handler) throw(); 102 103 /** The runtime will call this function if an %exception is thrown which 104 * violates the function's %exception specification. */ 105 void unexpected() __attribute__ ((__noreturn__)); 106 107 /** [18.6.4]/1: 'Returns true after completing evaluation of a 108 * throw-expression until either completing initialization of the 109 * exception-declaration in the matching handler or entering @c unexpected() 110 * due to the throw; or after entering @c terminate() for any reason 111 * other than an explicit call to @c terminate(). [Note: This includes 112 * stack unwinding [15.2]. end note]' 113 * 114 * 2: 'When @c uncaught_exception() is true, throwing an 115 * %exception can result in a call of @c terminate() 116 * (15.5.1).' 117 */ 118 bool uncaught_exception() throw() __attribute__ ((__pure__)); 119 120 // @} group exceptions 121 } // namespace std 122 123 namespace __gnu_cxx 124 { 125 _GLIBCXX_BEGIN_NAMESPACE_VERSION 126 127 /** 128 * @brief A replacement for the standard terminate_handler which 129 * prints more information about the terminating exception (if any) 130 * on stderr. 131 * 132 * @ingroup exceptions 133 * 134 * Call 135 * @code 136 * std::set_terminate(__gnu_cxx::__verbose_terminate_handler) 137 * @endcode 138 * to use. For more info, see 139 * http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt02ch06s02.html 140 * 141 * In 3.4 and later, this is on by default. 142 */ 143 void __verbose_terminate_handler(); 144 145 _GLIBCXX_END_NAMESPACE_VERSION 146 } // namespace 147 148 } // extern "C++" 149 150 #pragma GCC visibility pop 151 152 #if (defined(__GXX_EXPERIMENTAL_CXX0X__) \ 153 && defined(_GLIBCXX_ATOMIC_BUILTINS_4)) 154 #include <bits/exception_ptr.h> 155 #include <bits/nested_exception.h> 156 #endif 157 158 #endif 159