Arene Base
Fundamental Utilities For Safety Critical C++
Loading...
Searching...
No Matches
has_inline_variables.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_HAS_INLINE_VARIABLES_HPP_
6#define INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_COMPILER_SUPPORT_PLATFORM_QUERIES_HAS_INLINE_VARIABLES_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/preprocessor.hpp"
13// parasoft-end-suppress AUTOSAR-A16_2_2-a-2
14
15// NOLINTBEGIN(cppcoreguidelines-macro-usage) Explicitly providing compiler support macro functions
16// parasoft-begin-suppress AUTOSAR-A16_0_1-d-2 "Conditional defines permitted by A16-0-1 Permit #2"
17// parasoft-begin-suppress AUTOSAR-A16_0_1-a-2 "Conditional defines permitted by A16-0-1 Permit #2"
18
19/// @def ARENE_STD_INLINE_VARIABLES
20/// @brief A platform support query for testing if @c __cpp_inline_variables is defined.
21///
22/// Usage:
23/// @code{c++}
24/// #if ARENE_IS_ON(ARENE_STD_INLINE_VARIABLES)
25/// @endcode
26///
27/// The value of this query is determined as follows, in order of precedence:
28/// 1. If @c ARENE_STD_INLINE_VARIABLES has been explicitly defined via a @c -D flag to the compiler or similar:
29/// * @c ARENE_ON if it is truthy
30/// * @c ARENE_OFF if it is not truthy.
31/// 1. If @c __cpp_inline_variables is defined and its value is @c >=201606, it is @c ARENE_ON_BY_DEFAULT
32/// 1. Otherwise, it is @c ARENE_OFF_BY_DEFAULT
33
34#if defined(ARENE_STD_INLINE_VARIABLES)
35#if (ARENE_STD_INLINE_VARIABLES != 0)
36#define ARENE_STD_INLINE_VARIABLES ARENE_ON
37#else
38#define ARENE_STD_INLINE_VARIABLES ARENE_OFF
39#endif
40// parasoft-begin-suppress AUTOSAR-M16_0_7-a-2 "False positive: not used as a macro"
41#elif defined(__cpp_inline_variables) && __cpp_inline_variables >= 201606
42// parasoft-end-suppress AUTOSAR-M16_0_7-a-2
43#define ARENE_STD_INLINE_VARIABLES_I_ ARENE_ON_BY_DEFAULT
44#else
45#define ARENE_STD_INLINE_VARIABLES_I_ ARENE_OFF_BY_DEFAULT
46#endif
47
48#ifdef ARENE_DOC_GENERATION_RUNNING // make this appear when running doxygen, as it won't otherwise.
49#ifndef ARENE_STD_INLINE_VARIABLES
50#define ARENE_STD_INLINE_VARIABLES
51#endif
52#endif
53
54// NOLINTEND(cppcoreguidelines-macro-usage) Explicitly providing compiler support macro functions
55// parasoft-end-suppress AUTOSAR-A16_0_1-d-2
56// parasoft-end-suppress AUTOSAR-A16_0_1-a-2
57
58#endif // INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_COMPILER_SUPPORT_PLATFORM_QUERIES_HAS_INLINE_VARIABLES_HPP_