xref: /llvm-project/libcxx/include/__exception/operations.h (revision e99c4906e44ae3f921fa05356909d006cda8d954)
143562287SNikolas Klauser //===----------------------------------------------------------------------===//
243562287SNikolas Klauser //
343562287SNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
443562287SNikolas Klauser // See https://llvm.org/LICENSE.txt for license information.
543562287SNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
643562287SNikolas Klauser //
743562287SNikolas Klauser //===----------------------------------------------------------------------===//
843562287SNikolas Klauser 
943562287SNikolas Klauser #ifndef _LIBCPP___EXCEPTION_OPERATIONS_H
1043562287SNikolas Klauser #define _LIBCPP___EXCEPTION_OPERATIONS_H
1143562287SNikolas Klauser 
1243562287SNikolas Klauser #include <__config>
1343562287SNikolas Klauser 
1443562287SNikolas Klauser #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1543562287SNikolas Klauser #  pragma GCC system_header
1643562287SNikolas Klauser #endif
1743562287SNikolas Klauser 
1843562287SNikolas Klauser namespace std { // purposefully not using versioning namespace
1943562287SNikolas Klauser #if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS) ||                             \
2043562287SNikolas Klauser     defined(_LIBCPP_BUILDING_LIBRARY)
2143562287SNikolas Klauser using unexpected_handler = void (*)();
22f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI unexpected_handler set_unexpected(unexpected_handler) _NOEXCEPT;
23f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI unexpected_handler get_unexpected() _NOEXCEPT;
24*748023dcSNikolas Klauser [[__noreturn__]] _LIBCPP_EXPORTED_FROM_ABI void unexpected();
2543562287SNikolas Klauser #endif
2643562287SNikolas Klauser 
2743562287SNikolas Klauser using terminate_handler = void (*)();
28f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI terminate_handler set_terminate(terminate_handler) _NOEXCEPT;
29f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI terminate_handler get_terminate() _NOEXCEPT;
3043562287SNikolas Klauser 
314ea2c738SA. Jiang #if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_UNCAUGHT_EXCEPTION)
324ea2c738SA. Jiang _LIBCPP_EXPORTED_FROM_ABI _LIBCPP_DEPRECATED_IN_CXX17 bool uncaught_exception() _NOEXCEPT;
334ea2c738SA. Jiang #endif // _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_UNCAUGHT_EXCEPTION)
34ec350ad4Sphilnik777 _LIBCPP_EXPORTED_FROM_ABI int uncaught_exceptions() _NOEXCEPT;
3543562287SNikolas Klauser 
36f1ea0b11SNikolas Klauser class _LIBCPP_EXPORTED_FROM_ABI exception_ptr;
3743562287SNikolas Klauser 
38f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI exception_ptr current_exception() _NOEXCEPT;
39*748023dcSNikolas Klauser [[__noreturn__]] _LIBCPP_EXPORTED_FROM_ABI void rethrow_exception(exception_ptr);
4043562287SNikolas Klauser } // namespace std
4143562287SNikolas Klauser 
4243562287SNikolas Klauser #endif // _LIBCPP___EXCEPTION_OPERATIONS_H
43