Arene Base
Fundamental Utilities For Safety Critical C++
Loading...
Searching...
No Matches
exceptions_enabled.hpp
Go to the documentation of this file.
1// Copyright 2024, Toyota Motor Corporation
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4
5#ifndef INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_COMPILER_SUPPORT_PLATFORM_QUERIES_EXCEPTIONS_ENABLED_HPP_
6#define INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_COMPILER_SUPPORT_PLATFORM_QUERIES_EXCEPTIONS_ENABLED_HPP_
7
8// IWYU pragma: private, include "arene/base/compiler_support/platform_queries.hpp"
9// IWYU pragma: friend "arene/base/compiler_support/platform_queries/.*"
10
11// parasoft-begin-suppress AUTOSAR-A16_2_2-a-2 "Arene Base aggregate headers permitted by A16-2-2 Permit #1"
12#include "arene/base/compiler_support/platform_queries/has_feature.hpp"
13#include "arene/base/compiler_support/preprocessor.hpp"
14// parasoft-end-suppress AUTOSAR-A16_2_2-a-2
15
16// NOLINTBEGIN(cppcoreguidelines-macro-usage) Explicitly providing compiler support macro functions
17// parasoft-begin-suppress AUTOSAR-A16_0_1-d-2 "Conditional defines permitted by A16-0-1 Permit #2"
18// parasoft-begin-suppress AUTOSAR-A16_0_1-a-2 "Conditional defines permitted by A16-0-1 Permit #2"
19
20/// @def ARENE_EXCEPTIONS_ENABLED
21/// @brief A compile-time configuration flag for testing if exceptions are enabled
22///
23/// Usage:
24/// @code{c++}
25/// #if ARENE_IS_ON(ARENE_EXCEPTIONS_ENABLED)
26/// @endcode
27///
28/// The value of this query is determined as follows, in order of precedence:
29/// 1. If @c ARENE_EXCEPTIONS_ENABLED has been explicitly defined via a @c -D flag to the compiler or similar:
30/// * @c ARENE_ON if it is truthy
31/// * @c ARENE_OFF if it is not truthy.
32/// 1. If @c __cpp_exceptions is defined, it is @c ARENE_ON_BY_DEFAULT
33/// 1. If @c __EXCEPTIONS is defined, it is @c ARENE_ON_BY_DEFAULT
34/// 1. Otherwise, it is @c ARENE_OFF_BY_DEFAULT
35
36#if defined(ARENE_EXCEPTIONS_ENABLED)
37#if (ARENE_EXCEPTIONS_ENABLED != 0)
38#define ARENE_EXCEPTIONS_ENABLED_I_ ARENE_ON
39#else
40#define ARENE_EXCEPTIONS_ENABLED_I_ ARENE_OFF
41#endif
42// parasoft-begin-suppress AUTOSAR-M16_0_7-a-2 "False positive: not used as a macro"
43#elif ARENE_HAS_FEATURE(cxx_exceptions)
44// parasoft-end-suppress AUTOSAR-M16_0_7-a-2
45#define ARENE_EXCEPTIONS_ENABLED_I_ ARENE_ON_BY_DEFAULT
46#elif defined(__cpp_exceptions)
47#define ARENE_EXCEPTIONS_ENABLED_I_ ARENE_ON_BY_DEFAULT
48#elif defined(__EXCEPTIONS)
49#define ARENE_EXCEPTIONS_ENABLED_I_ ARENE_ON_BY_DEFAULT
50#else
51#define ARENE_EXCEPTIONS_ENABLED_I_ ARENE_OFF_BY_DEFAULT
52#endif
53
54#ifdef ARENE_DOC_GENERATION_RUNNING // make this appear when running doxygen, as it won't otherwise.
55#ifndef ARENE_EXCEPTIONS_ENABLED
56#define ARENE_EXCEPTIONS_ENABLED
57#endif
58#endif
59
60// NOLINTEND(cppcoreguidelines-macro-usage) Explicitly providing compiler support macro functions
61// parasoft-end-suppress AUTOSAR-A16_0_1-d-2
62// parasoft-end-suppress AUTOSAR-A16_0_1-a-2
63
64#endif // INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_COMPILER_SUPPORT_PLATFORM_QUERIES_EXCEPTIONS_ENABLED_HPP_