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 #ifdef __clang__ 57 const char *__imp_ __attribute__((__unused__)); // only clang emits a warning 58 #else 59 const char *__imp_; 60 #endif 61 }; 62 _LIBCPP_END_NAMESPACE_STD 63 #endif 64 65 namespace std // purposefully not using versioning namespace 66 { 67 68 class _LIBCPP_EXCEPTION_ABI logic_error 69 : public exception 70 { 71 private: 72 _VSTD::__libcpp_refstring __imp_; 73 public: 74 explicit logic_error(const string&); 75 explicit logic_error(const char*); 76 77 logic_error(const logic_error&) _NOEXCEPT; 78 logic_error& operator=(const logic_error&) _NOEXCEPT; 79 80 virtual ~logic_error() _NOEXCEPT; 81 82 virtual const char* what() const _NOEXCEPT; 83 }; 84 85 class _LIBCPP_EXCEPTION_ABI runtime_error 86 : public exception 87 { 88 private: 89 _VSTD::__libcpp_refstring __imp_; 90 public: 91 explicit runtime_error(const string&); 92 explicit runtime_error(const char*); 93 94 runtime_error(const runtime_error&) _NOEXCEPT; 95 runtime_error& operator=(const runtime_error&) _NOEXCEPT; 96 97 virtual ~runtime_error() _NOEXCEPT; 98 99 virtual const char* what() const _NOEXCEPT; 100 }; 101 102 class _LIBCPP_EXCEPTION_ABI domain_error 103 : public logic_error 104 { 105 public: 106 _LIBCPP_INLINE_VISIBILITY explicit domain_error(const string& __s) : logic_error(__s) {} 107 _LIBCPP_INLINE_VISIBILITY explicit domain_error(const char* __s) : logic_error(__s) {} 108 109 virtual ~domain_error() _NOEXCEPT; 110 }; 111 112 class _LIBCPP_EXCEPTION_ABI invalid_argument 113 : public logic_error 114 { 115 public: 116 _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const string& __s) : logic_error(__s) {} 117 _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const char* __s) : logic_error(__s) {} 118 119 virtual ~invalid_argument() _NOEXCEPT; 120 }; 121 122 class _LIBCPP_EXCEPTION_ABI length_error 123 : public logic_error 124 { 125 public: 126 _LIBCPP_INLINE_VISIBILITY explicit length_error(const string& __s) : logic_error(__s) {} 127 _LIBCPP_INLINE_VISIBILITY explicit length_error(const char* __s) : logic_error(__s) {} 128 129 virtual ~length_error() _NOEXCEPT; 130 }; 131 132 class _LIBCPP_EXCEPTION_ABI out_of_range 133 : public logic_error 134 { 135 public: 136 _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const string& __s) : logic_error(__s) {} 137 _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const char* __s) : logic_error(__s) {} 138 139 virtual ~out_of_range() _NOEXCEPT; 140 }; 141 142 class _LIBCPP_EXCEPTION_ABI range_error 143 : public runtime_error 144 { 145 public: 146 _LIBCPP_INLINE_VISIBILITY explicit range_error(const string& __s) : runtime_error(__s) {} 147 _LIBCPP_INLINE_VISIBILITY explicit range_error(const char* __s) : runtime_error(__s) {} 148 149 virtual ~range_error() _NOEXCEPT; 150 }; 151 152 class _LIBCPP_EXCEPTION_ABI overflow_error 153 : public runtime_error 154 { 155 public: 156 _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const string& __s) : runtime_error(__s) {} 157 _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const char* __s) : runtime_error(__s) {} 158 159 virtual ~overflow_error() _NOEXCEPT; 160 }; 161 162 class _LIBCPP_EXCEPTION_ABI underflow_error 163 : public runtime_error 164 { 165 public: 166 _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const string& __s) : runtime_error(__s) {} 167 _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const char* __s) : runtime_error(__s) {} 168 169 virtual ~underflow_error() _NOEXCEPT; 170 }; 171 172 } // std 173 174 #endif // _LIBCPP_STDEXCEPT 175