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 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 41extern "C++" { 42 43namespace 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_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) 124 125 /** 126 * @brief A replacement for the standard terminate_handler which 127 * prints more information about the terminating exception (if any) 128 * on stderr. 129 * 130 * @ingroup exceptions 131 * 132 * Call 133 * @code 134 * std::set_terminate(__gnu_cxx::__verbose_terminate_handler) 135 * @endcode 136 * to use. For more info, see 137 * http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt02ch06s02.html 138 * 139 * In 3.4 and later, this is on by default. 140 */ 141 void __verbose_terminate_handler(); 142 143_GLIBCXX_END_NAMESPACE 144 145} // extern "C++" 146 147#pragma GCC visibility pop 148 149#if (defined(__GXX_EXPERIMENTAL_CXX0X__) \ 150 && defined(_GLIBCXX_ATOMIC_BUILTINS_4)) 151#include <exception_ptr.h> 152#include <nested_exception.h> 153#endif 154 155#endif 156