// Standard C++ <exception> header
// Copyright (C) Florian Negele

// This file is part of the Eigen Compiler Suite.

// The ECS is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// The ECS is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// Under Section 7 of the GNU General Public License version 3,
// the copyright holder grants you additional permissions to use
// this file as described in the ECS Runtime Support Exception.

// You should have received a copy of the GNU General Public License
// and a copy of the ECS Runtime Support Exception along with
// the ECS.  If not, see <https://www.gnu.org/licenses/>.

#ifndef ECS_CPP_EXCEPTION_HEADER_INCLUDED
#define ECS_CPP_EXCEPTION_HEADER_INCLUDED

#define __cpp_lib_uncaught_exceptions 201411L

namespace std
{
	class bad_exception;
	class exception;
	class nested_exception;

	using terminate_handler = void (*) ();

	auto get_terminate [[ecs::pure]] () noexcept -> terminate_handler;
	auto set_terminate (terminate_handler) noexcept -> terminate_handler;
	auto terminate [[noreturn]] () noexcept -> void;
	auto uncaught_exceptions [[ecs::pure]] () noexcept -> int;
}

#endif // ECS_CPP_EXCEPTION_HEADER_INCLUDED
