13e519524SHoward Hinnant// -*- C++ -*-
23e519524SHoward Hinnant//===--------------------------- stdexcept --------------------------------===//
33e519524SHoward Hinnant//
45b08a8a4SHoward Hinnant//                     The LLVM Compiler Infrastructure
53e519524SHoward Hinnant//
6412dbebeSHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
7412dbebeSHoward Hinnant// Source Licenses. See LICENSE.TXT for details.
83e519524SHoward Hinnant//
93e519524SHoward Hinnant//===----------------------------------------------------------------------===//
103e519524SHoward Hinnant
113e519524SHoward Hinnant#ifndef _LIBCPP_STDEXCEPT
123e519524SHoward Hinnant#define _LIBCPP_STDEXCEPT
133e519524SHoward Hinnant
143e519524SHoward Hinnant/*
153e519524SHoward Hinnant    stdexcept synopsis
163e519524SHoward Hinnant
173e519524SHoward Hinnantnamespace std
183e519524SHoward Hinnant{
193e519524SHoward Hinnant
203e519524SHoward Hinnantclass logic_error;
213e519524SHoward Hinnant    class domain_error;
223e519524SHoward Hinnant    class invalid_argument;
233e519524SHoward Hinnant    class length_error;
243e519524SHoward Hinnant    class out_of_range;
253e519524SHoward Hinnantclass runtime_error;
263e519524SHoward Hinnant    class range_error;
273e519524SHoward Hinnant    class overflow_error;
283e519524SHoward Hinnant    class underflow_error;
293e519524SHoward Hinnant
303e519524SHoward Hinnantfor each class xxx_error:
313e519524SHoward Hinnant
323e519524SHoward Hinnantclass xxx_error : public exception // at least indirectly
333e519524SHoward Hinnant{
343e519524SHoward Hinnantpublic:
353e519524SHoward Hinnant    explicit xxx_error(const string& what_arg);
36a62f2899SHoward Hinnant    explicit xxx_error(const char*   what_arg);
373e519524SHoward Hinnant
38a62f2899SHoward Hinnant    virtual const char* what() const noexcept // returns what_arg
393e519524SHoward Hinnant};
403e519524SHoward Hinnant
413e519524SHoward Hinnant}  // std
423e519524SHoward Hinnant
433e519524SHoward Hinnant*/
443e519524SHoward Hinnant
453e519524SHoward Hinnant#include <__config>
463e519524SHoward Hinnant#include <exception>
473e519524SHoward Hinnant#include <iosfwd>  // for string forward decl
483e519524SHoward Hinnant
49*073458b1SHoward Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
503e519524SHoward Hinnant#pragma GCC system_header
51*073458b1SHoward Hinnant#endif
523e519524SHoward Hinnant
533e519524SHoward Hinnantnamespace std  // purposefully not using versioning namespace
543e519524SHoward Hinnant{
553e519524SHoward Hinnant
563e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI logic_error
573e519524SHoward Hinnant    : public exception
583e519524SHoward Hinnant{
593e519524SHoward Hinnantprivate:
603e519524SHoward Hinnant    void* __imp_;
613e519524SHoward Hinnantpublic:
623e519524SHoward Hinnant    explicit logic_error(const string&);
633e519524SHoward Hinnant    explicit logic_error(const char*);
643e519524SHoward Hinnant
65a62f2899SHoward Hinnant    logic_error(const logic_error&) _NOEXCEPT;
66a62f2899SHoward Hinnant    logic_error& operator=(const logic_error&) _NOEXCEPT;
673e519524SHoward Hinnant
68a62f2899SHoward Hinnant    virtual ~logic_error() _NOEXCEPT;
693e519524SHoward Hinnant
70a62f2899SHoward Hinnant    virtual const char* what() const _NOEXCEPT;
713e519524SHoward Hinnant};
723e519524SHoward Hinnant
733e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI runtime_error
743e519524SHoward Hinnant    : public exception
753e519524SHoward Hinnant{
763e519524SHoward Hinnantprivate:
773e519524SHoward Hinnant    void* __imp_;
783e519524SHoward Hinnantpublic:
793e519524SHoward Hinnant    explicit runtime_error(const string&);
803e519524SHoward Hinnant    explicit runtime_error(const char*);
813e519524SHoward Hinnant
82a62f2899SHoward Hinnant    runtime_error(const runtime_error&) _NOEXCEPT;
83a62f2899SHoward Hinnant    runtime_error& operator=(const runtime_error&) _NOEXCEPT;
843e519524SHoward Hinnant
85a62f2899SHoward Hinnant    virtual ~runtime_error() _NOEXCEPT;
863e519524SHoward Hinnant
87a62f2899SHoward Hinnant    virtual const char* what() const _NOEXCEPT;
883e519524SHoward Hinnant};
893e519524SHoward Hinnant
903e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI domain_error
913e519524SHoward Hinnant    : public logic_error
923e519524SHoward Hinnant{
933e519524SHoward Hinnantpublic:
943e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit domain_error(const string& __s) : logic_error(__s) {}
953e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit domain_error(const char* __s)   : logic_error(__s) {}
963e519524SHoward Hinnant
97a62f2899SHoward Hinnant    virtual ~domain_error() _NOEXCEPT;
983e519524SHoward Hinnant};
993e519524SHoward Hinnant
1003e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI invalid_argument
1013e519524SHoward Hinnant    : public logic_error
1023e519524SHoward Hinnant{
1033e519524SHoward Hinnantpublic:
1043e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const string& __s) : logic_error(__s) {}
1053e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const char* __s)   : logic_error(__s) {}
1063e519524SHoward Hinnant
107a62f2899SHoward Hinnant    virtual ~invalid_argument() _NOEXCEPT;
1083e519524SHoward Hinnant};
1093e519524SHoward Hinnant
1103e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI length_error
1113e519524SHoward Hinnant    : public logic_error
1123e519524SHoward Hinnant{
1133e519524SHoward Hinnantpublic:
1143e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit length_error(const string& __s) : logic_error(__s) {}
1153e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit length_error(const char* __s)   : logic_error(__s) {}
1163e519524SHoward Hinnant
117a62f2899SHoward Hinnant    virtual ~length_error() _NOEXCEPT;
1183e519524SHoward Hinnant};
1193e519524SHoward Hinnant
1203e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI out_of_range
1213e519524SHoward Hinnant    : public logic_error
1223e519524SHoward Hinnant{
1233e519524SHoward Hinnantpublic:
1243e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const string& __s) : logic_error(__s) {}
1253e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const char* __s)   : logic_error(__s) {}
1263e519524SHoward Hinnant
127a62f2899SHoward Hinnant    virtual ~out_of_range() _NOEXCEPT;
1283e519524SHoward Hinnant};
1293e519524SHoward Hinnant
1303e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI range_error
1313e519524SHoward Hinnant    : public runtime_error
1323e519524SHoward Hinnant{
1333e519524SHoward Hinnantpublic:
1343e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit range_error(const string& __s) : runtime_error(__s) {}
1353e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit range_error(const char* __s)   : runtime_error(__s) {}
1363e519524SHoward Hinnant
137a62f2899SHoward Hinnant    virtual ~range_error() _NOEXCEPT;
1383e519524SHoward Hinnant};
1393e519524SHoward Hinnant
1403e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI overflow_error
1413e519524SHoward Hinnant    : public runtime_error
1423e519524SHoward Hinnant{
1433e519524SHoward Hinnantpublic:
1443e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const string& __s) : runtime_error(__s) {}
1453e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const char* __s)   : runtime_error(__s) {}
1463e519524SHoward Hinnant
147a62f2899SHoward Hinnant    virtual ~overflow_error() _NOEXCEPT;
1483e519524SHoward Hinnant};
1493e519524SHoward Hinnant
1503e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI underflow_error
1513e519524SHoward Hinnant    : public runtime_error
1523e519524SHoward Hinnant{
1533e519524SHoward Hinnantpublic:
1543e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const string& __s) : runtime_error(__s) {}
1553e519524SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const char* __s)   : runtime_error(__s) {}
1563e519524SHoward Hinnant
157a62f2899SHoward Hinnant    virtual ~underflow_error() _NOEXCEPT;
1583e519524SHoward Hinnant};
1593e519524SHoward Hinnant
1603e519524SHoward Hinnant}  // std
1613e519524SHoward Hinnant
1623e519524SHoward Hinnant#endif  // _LIBCPP_STDEXCEPT
163