home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / exception < prev    next >
Text File  |  2005-01-29  |  5KB  |  121 lines

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