Home | History | Annotate | Download | only in include
      1 // -*- C++ -*-
      2 //===--------------------------- stdexcept --------------------------------===//
      3 //
      4 //                     The LLVM Compiler Infrastructure
      5 //
      6 // This file is dual licensed under the MIT and the University of Illinois Open
      7 // Source Licenses. See LICENSE.TXT for details.
      8 //
      9 //===----------------------------------------------------------------------===//
     10 
     11 #ifndef _LIBCPP_STDEXCEPT
     12 #define _LIBCPP_STDEXCEPT
     13 
     14 /*
     15     stdexcept synopsis
     16 
     17 namespace std
     18 {
     19 
     20 class logic_error;
     21     class domain_error;
     22     class invalid_argument;
     23     class length_error;
     24     class out_of_range;
     25 class runtime_error;
     26     class range_error;
     27     class overflow_error;
     28     class underflow_error;
     29 
     30 for each class xxx_error:
     31 
     32 class xxx_error : public exception // at least indirectly
     33 {
     34 public:
     35     explicit xxx_error(const string& what_arg);
     36     explicit xxx_error(const char*   what_arg);
     37 
     38     virtual const char* what() const noexcept // returns what_arg
     39 };
     40 
     41 }  // std
     42 
     43 */
     44 
     45 #include <__config>
     46 #include <exception>
     47 #include <iosfwd>  // for string forward decl
     48 
     49 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     50 #pragma GCC system_header
     51 #endif
     52 
     53 #ifndef _LIBCPP___REFSTRING
     54 _LIBCPP_BEGIN_NAMESPACE_STD
     55 class _LIBCPP_HIDDEN __libcpp_refstring {
     56     const char *__imp_ _LIBCPP_UNUSED;
     57 };
     58 _LIBCPP_END_NAMESPACE_STD
     59 #endif
     60 
     61 namespace std  // purposefully not using versioning namespace
     62 {
     63 
     64 class _LIBCPP_EXCEPTION_ABI logic_error
     65     : public exception
     66 {
     67 private:
     68     _VSTD::__libcpp_refstring __imp_;
     69 public:
     70     explicit logic_error(const string&);
     71     explicit logic_error(const char*);
     72 
     73     logic_error(const logic_error&) _NOEXCEPT;
     74     logic_error& operator=(const logic_error&) _NOEXCEPT;
     75 
     76     virtual ~logic_error() _NOEXCEPT;
     77 
     78     virtual const char* what() const _NOEXCEPT;
     79 };
     80 
     81 class _LIBCPP_EXCEPTION_ABI runtime_error
     82     : public exception
     83 {
     84 private:
     85     _VSTD::__libcpp_refstring __imp_;
     86 public:
     87     explicit runtime_error(const string&);
     88     explicit runtime_error(const char*);
     89 
     90     runtime_error(const runtime_error&) _NOEXCEPT;
     91     runtime_error& operator=(const runtime_error&) _NOEXCEPT;
     92 
     93     virtual ~runtime_error() _NOEXCEPT;
     94 
     95     virtual const char* what() const _NOEXCEPT;
     96 };
     97 
     98 class _LIBCPP_EXCEPTION_ABI domain_error
     99     : public logic_error
    100 {
    101 public:
    102     _LIBCPP_INLINE_VISIBILITY explicit domain_error(const string& __s) : logic_error(__s) {}
    103     _LIBCPP_INLINE_VISIBILITY explicit domain_error(const char* __s)   : logic_error(__s) {}
    104 
    105     virtual ~domain_error() _NOEXCEPT;
    106 };
    107 
    108 class _LIBCPP_EXCEPTION_ABI invalid_argument
    109     : public logic_error
    110 {
    111 public:
    112     _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const string& __s) : logic_error(__s) {}
    113     _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const char* __s)   : logic_error(__s) {}
    114 
    115     virtual ~invalid_argument() _NOEXCEPT;
    116 };
    117 
    118 class _LIBCPP_EXCEPTION_ABI length_error
    119     : public logic_error
    120 {
    121 public:
    122     _LIBCPP_INLINE_VISIBILITY explicit length_error(const string& __s) : logic_error(__s) {}
    123     _LIBCPP_INLINE_VISIBILITY explicit length_error(const char* __s)   : logic_error(__s) {}
    124 
    125     virtual ~length_error() _NOEXCEPT;
    126 };
    127 
    128 class _LIBCPP_EXCEPTION_ABI out_of_range
    129     : public logic_error
    130 {
    131 public:
    132     _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const string& __s) : logic_error(__s) {}
    133     _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const char* __s)   : logic_error(__s) {}
    134 
    135     virtual ~out_of_range() _NOEXCEPT;
    136 };
    137 
    138 class _LIBCPP_EXCEPTION_ABI range_error
    139     : public runtime_error
    140 {
    141 public:
    142     _LIBCPP_INLINE_VISIBILITY explicit range_error(const string& __s) : runtime_error(__s) {}
    143     _LIBCPP_INLINE_VISIBILITY explicit range_error(const char* __s)   : runtime_error(__s) {}
    144 
    145     virtual ~range_error() _NOEXCEPT;
    146 };
    147 
    148 class _LIBCPP_EXCEPTION_ABI overflow_error
    149     : public runtime_error
    150 {
    151 public:
    152     _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const string& __s) : runtime_error(__s) {}
    153     _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const char* __s)   : runtime_error(__s) {}
    154 
    155     virtual ~overflow_error() _NOEXCEPT;
    156 };
    157 
    158 class _LIBCPP_EXCEPTION_ABI underflow_error
    159     : public runtime_error
    160 {
    161 public:
    162     _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const string& __s) : runtime_error(__s) {}
    163     _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const char* __s)   : runtime_error(__s) {}
    164 
    165     virtual ~underflow_error() _NOEXCEPT;
    166 };
    167 
    168 }  // std
    169 
    170 #endif  // _LIBCPP_STDEXCEPT
    171