1e78f53d1SNikolas Klauser// -*- C++ -*- 2e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 3e78f53d1SNikolas Klauser// 4e78f53d1SNikolas Klauser// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5e78f53d1SNikolas Klauser// See https://llvm.org/LICENSE.txt for license information. 6e78f53d1SNikolas Klauser// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7e78f53d1SNikolas Klauser// 8e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 9e78f53d1SNikolas Klauser 10*ce777190SNikolas Klauser#ifndef _LIBCPP___CXX03_EXCEPTION 11*ce777190SNikolas Klauser#define _LIBCPP___CXX03_EXCEPTION 12e78f53d1SNikolas Klauser 13e78f53d1SNikolas Klauser/* 14e78f53d1SNikolas Klauser exception synopsis 15e78f53d1SNikolas Klauser 16e78f53d1SNikolas Klausernamespace std 17e78f53d1SNikolas Klauser{ 18e78f53d1SNikolas Klauser 19e78f53d1SNikolas Klauserclass exception 20e78f53d1SNikolas Klauser{ 21e78f53d1SNikolas Klauserpublic: 22e78f53d1SNikolas Klauser exception() noexcept; 23e78f53d1SNikolas Klauser exception(const exception&) noexcept; 24e78f53d1SNikolas Klauser exception& operator=(const exception&) noexcept; 25e78f53d1SNikolas Klauser virtual ~exception() noexcept; 26e78f53d1SNikolas Klauser virtual const char* what() const noexcept; 27e78f53d1SNikolas Klauser}; 28e78f53d1SNikolas Klauser 29e78f53d1SNikolas Klauserclass bad_exception 30e78f53d1SNikolas Klauser : public exception 31e78f53d1SNikolas Klauser{ 32e78f53d1SNikolas Klauserpublic: 33e78f53d1SNikolas Klauser bad_exception() noexcept; 34e78f53d1SNikolas Klauser bad_exception(const bad_exception&) noexcept; 35e78f53d1SNikolas Klauser bad_exception& operator=(const bad_exception&) noexcept; 36e78f53d1SNikolas Klauser virtual ~bad_exception() noexcept; 37e78f53d1SNikolas Klauser virtual const char* what() const noexcept; 38e78f53d1SNikolas Klauser}; 39e78f53d1SNikolas Klauser 40e78f53d1SNikolas Klausertypedef void (*unexpected_handler)(); 41e78f53d1SNikolas Klauserunexpected_handler set_unexpected(unexpected_handler f ) noexcept; 42e78f53d1SNikolas Klauserunexpected_handler get_unexpected() noexcept; 43e78f53d1SNikolas Klauser[[noreturn]] void unexpected(); 44e78f53d1SNikolas Klauser 45e78f53d1SNikolas Klausertypedef void (*terminate_handler)(); 46e78f53d1SNikolas Klauserterminate_handler set_terminate(terminate_handler f ) noexcept; 47e78f53d1SNikolas Klauserterminate_handler get_terminate() noexcept; 48e78f53d1SNikolas Klauser[[noreturn]] void terminate() noexcept; 49e78f53d1SNikolas Klauser 50e78f53d1SNikolas Klauserbool uncaught_exception() noexcept; 51e78f53d1SNikolas Klauserint uncaught_exceptions() noexcept; // C++17 52e78f53d1SNikolas Klauser 53e78f53d1SNikolas Klausertypedef unspecified exception_ptr; 54e78f53d1SNikolas Klauser 55e78f53d1SNikolas Klauserexception_ptr current_exception() noexcept; 56e78f53d1SNikolas Klauservoid rethrow_exception [[noreturn]] (exception_ptr p); 57e78f53d1SNikolas Klausertemplate<class E> exception_ptr make_exception_ptr(E e) noexcept; 58e78f53d1SNikolas Klauser 59e78f53d1SNikolas Klauserclass nested_exception 60e78f53d1SNikolas Klauser{ 61e78f53d1SNikolas Klauserpublic: 62e78f53d1SNikolas Klauser nested_exception() noexcept; 63e78f53d1SNikolas Klauser nested_exception(const nested_exception&) noexcept = default; 64e78f53d1SNikolas Klauser nested_exception& operator=(const nested_exception&) noexcept = default; 65e78f53d1SNikolas Klauser virtual ~nested_exception() = default; 66e78f53d1SNikolas Klauser 67e78f53d1SNikolas Klauser // access functions 68e78f53d1SNikolas Klauser [[noreturn]] void rethrow_nested() const; 69e78f53d1SNikolas Klauser exception_ptr nested_ptr() const noexcept; 70e78f53d1SNikolas Klauser}; 71e78f53d1SNikolas Klauser 72e78f53d1SNikolas Klausertemplate <class T> [[noreturn]] void throw_with_nested(T&& t); 73e78f53d1SNikolas Klausertemplate <class E> void rethrow_if_nested(const E& e); 74e78f53d1SNikolas Klauser 75e78f53d1SNikolas Klauser} // std 76e78f53d1SNikolas Klauser 77e78f53d1SNikolas Klauser*/ 78e78f53d1SNikolas Klauser 7973fbae83SNikolas Klauser#include <__cxx03/__config> 8073fbae83SNikolas Klauser#include <__cxx03/__exception/exception.h> 8173fbae83SNikolas Klauser#include <__cxx03/__exception/exception_ptr.h> 8273fbae83SNikolas Klauser#include <__cxx03/__exception/nested_exception.h> 8373fbae83SNikolas Klauser#include <__cxx03/__exception/operations.h> 8473fbae83SNikolas Klauser#include <__cxx03/__exception/terminate.h> 8573fbae83SNikolas Klauser#include <__cxx03/version> 86e78f53d1SNikolas Klauser 87e78f53d1SNikolas Klauser#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 88e78f53d1SNikolas Klauser# pragma GCC system_header 89e78f53d1SNikolas Klauser#endif 90e78f53d1SNikolas Klauser 91e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 9273fbae83SNikolas Klauser# include <__cxx03/cstdlib> 9373fbae83SNikolas Klauser# include <__cxx03/type_traits> 94e78f53d1SNikolas Klauser#endif 95e78f53d1SNikolas Klauser 96*ce777190SNikolas Klauser#endif // _LIBCPP___CXX03_EXCEPTION 97