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_; 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