master
  1// -*- C++ -*-
  2//===----------------------------------------------------------------------===//
  3//
  4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  5// See https://llvm.org/LICENSE.txt for license information.
  6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  7//
  8//===----------------------------------------------------------------------===//
  9
 10#ifndef _LIBCPP_EXCEPTION
 11#define _LIBCPP_EXCEPTION
 12
 13/*
 14    exception synopsis
 15
 16namespace std
 17{
 18
 19class exception
 20{
 21public:
 22    exception() noexcept;
 23    exception(const exception&) noexcept;
 24    exception& operator=(const exception&) noexcept;
 25    virtual ~exception() noexcept;
 26    virtual const char* what() const noexcept;
 27};
 28
 29class bad_exception
 30    : public exception
 31{
 32public:
 33    bad_exception() noexcept;
 34    bad_exception(const bad_exception&) noexcept;
 35    bad_exception& operator=(const bad_exception&) noexcept;
 36    virtual ~bad_exception() noexcept;
 37    virtual const char* what() const noexcept;
 38};
 39
 40typedef void (*unexpected_handler)();
 41unexpected_handler set_unexpected(unexpected_handler  f ) noexcept;
 42unexpected_handler get_unexpected() noexcept;
 43[[noreturn]] void unexpected();
 44
 45typedef void (*terminate_handler)();
 46terminate_handler set_terminate(terminate_handler  f ) noexcept;
 47terminate_handler get_terminate() noexcept;
 48[[noreturn]] void terminate() noexcept;
 49
 50bool uncaught_exception()  noexcept;  // deprecated in C++17, removed in C++20
 51int  uncaught_exceptions() noexcept;  // C++17
 52
 53typedef unspecified exception_ptr;
 54
 55exception_ptr current_exception() noexcept;
 56void rethrow_exception [[noreturn]] (exception_ptr p);
 57template<class E> exception_ptr make_exception_ptr(E e) noexcept;
 58
 59class nested_exception
 60{
 61public:
 62    nested_exception() noexcept;
 63    nested_exception(const nested_exception&) noexcept = default;
 64    nested_exception& operator=(const nested_exception&) noexcept = default;
 65    virtual ~nested_exception() = default;
 66
 67    // access functions
 68    [[noreturn]] void rethrow_nested() const;
 69    exception_ptr nested_ptr() const noexcept;
 70};
 71
 72template <class T> [[noreturn]] void throw_with_nested(T&& t);
 73template <class E> void rethrow_if_nested(const E& e);
 74
 75}  // std
 76
 77*/
 78
 79#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 80#  include <__cxx03/exception>
 81#else
 82#  include <__config>
 83#  include <__exception/exception.h>
 84#  include <__exception/exception_ptr.h>
 85#  include <__exception/nested_exception.h>
 86#  include <__exception/operations.h>
 87#  include <__exception/terminate.h>
 88#  include <version>
 89
 90#  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 91#    pragma GCC system_header
 92#  endif
 93
 94#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
 95#    include <cstddef>
 96#    include <cstdlib>
 97#    include <new>
 98#    include <type_traits>
 99#  endif
100#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
101
102#endif // _LIBCPP_EXCEPTION