Loading...
Searching...
No Matches
Go to the documentation of this file.
16#if !defined(BSONCXX_V1_DETAIL_MACROS_HPP)
17#define BSONCXX_V1_DETAIL_MACROS_HPP
20#define BSONCXX_PRIVATE_STRINGIFY(...) BSONCXX_PRIVATE_STRINGIFY_IMPL(__VA_ARGS__)
21#define BSONCXX_PRIVATE_STRINGIFY_IMPL(...) #__VA_ARGS__
24#define BSONCXX_PRIVATE_CONCAT(A, ...) BSONCXX_PRIVATE_CONCAT_IMPL(A, __VA_ARGS__)
25#define BSONCXX_PRIVATE_CONCAT_IMPL(A, ...) A##__VA_ARGS__
40#define BSONCXX_PRIVATE_PRAGMA(...) BSONCXX_PRIVATE_PRAGMA_IMPL(__VA_ARGS__)
43#define BSONCXX_PRIVATE_PRAGMA_IMPL(...) __pragma(__VA_ARGS__)
45#define BSONCXX_PRIVATE_PRAGMA_IMPL(...) _Pragma(BSONCXX_PRIVATE_STRINGIFY(__VA_ARGS__))
51#define BSONCXX_PRIVATE_FORCE_SEMICOLON static_assert(true, "")
68#define BSONCXX_PRIVATE_RETURNS(...) \
69 noexcept(noexcept(__VA_ARGS__))->decltype(__VA_ARGS__) { \
72 BSONCXX_PRIVATE_FORCE_SEMICOLON
80#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L && _MSC_VER > 1910)
81#define BSONCXX_PRIVATE_CONSTEXPR_CXX14 constexpr
83#define BSONCXX_PRIVATE_CONSTEXPR_CXX14 inline
86#define BSONCXX_PRIVATE_MAX_ALIGN_T std::max_align_t
88#define BSONCXX_PRIVATE_IF_MSVC(...)
89#define BSONCXX_PRIVATE_IF_GCC(...)
90#define BSONCXX_PRIVATE_IF_CLANG(...)
91#define BSONCXX_PRIVATE_IF_GNU_LIKE(...) \
92 BSONCXX_PRIVATE_IF_GCC(__VA_ARGS__) \
93 BSONCXX_PRIVATE_IF_CLANG(__VA_ARGS__)
98 #undef BSONCXX_PRIVATE_IF_CLANG
99 #define BSONCXX_PRIVATE_IF_CLANG(...) __VA_ARGS__
101 #undef BSONCXX_PRIVATE_IF_GCC
102 #define BSONCXX_PRIVATE_IF_GCC(...) __VA_ARGS__
104#elif defined(_MSC_VER)
105 #undef BSONCXX_PRIVATE_IF_MSVC
106 #define BSONCXX_PRIVATE_IF_MSVC(...) __VA_ARGS__
126 !defined(_MSC_VER) && \
127 (__cplusplus >= 201703L || (defined(__cpp_inline_variables) && __cpp_inline_variables >= 201606L))) || \
128 (defined(_MSC_VER) && _MSC_VER >= 1920 && defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
129#define BSONCXX_PRIVATE_INLINE_CXX17 inline
130#elif defined(__MINGW32__)
131#define BSONCXX_PRIVATE_INLINE_CXX17 [[gnu::selectany]]
133#define BSONCXX_PRIVATE_INLINE_CXX17 \
134 BSONCXX_PRIVATE_IF_GCC([[gnu::weak]]) \
135 BSONCXX_PRIVATE_IF_CLANG(_Pragma("clang diagnostic push") _Pragma( \
136 "clang diagnostic ignored \"-Wc++17-extensions\"") __inline__ _Pragma("clang diagnostic pop")) \
137 BSONCXX_PRIVATE_IF_MSVC(__declspec(selectany))
150#define BSONCXX_PRIVATE_WARNINGS_DISABLE(Spec) \
151 BSONCXX_PRIVATE_CONCAT(BSONCXX_PRIVATE_WARNINGS_DISABLE_IMPL_FOR_, Spec) \
152 BSONCXX_PRIVATE_FORCE_SEMICOLON
155#define BSONCXX_PRIVATE_WARNINGS_PUSH() \
156 BSONCXX_PRIVATE_IF_GNU_LIKE(BSONCXX_PRIVATE_PRAGMA(GCC diagnostic push)) \
157 BSONCXX_PRIVATE_IF_MSVC(BSONCXX_PRIVATE_PRAGMA(warning(push))) \
158 BSONCXX_PRIVATE_FORCE_SEMICOLON
162#define BSONCXX_PRIVATE_WARNINGS_POP() \
163 BSONCXX_PRIVATE_IF_GNU_LIKE(BSONCXX_PRIVATE_PRAGMA(GCC diagnostic pop)) \
164 BSONCXX_PRIVATE_IF_MSVC(BSONCXX_PRIVATE_PRAGMA(warning(pop))) \
165 BSONCXX_PRIVATE_FORCE_SEMICOLON
167#define BSONCXX_PRIVATE_WARNINGS_DISABLE_IMPL_FOR_GCC(...) \
168 BSONCXX_PRIVATE_IF_GCC(BSONCXX_PRIVATE_PRAGMA(GCC diagnostic ignored __VA_ARGS__))
170#define BSONCXX_PRIVATE_WARNINGS_DISABLE_IMPL_FOR_Clang(...) \
171 BSONCXX_PRIVATE_IF_CLANG(BSONCXX_PRIVATE_PRAGMA(GCC diagnostic ignored __VA_ARGS__))
173#define BSONCXX_PRIVATE_WARNINGS_DISABLE_IMPL_FOR_GNU(...) \
174 BSONCXX_PRIVATE_WARNINGS_DISABLE_IMPL_FOR_GCC(__VA_ARGS__) \
175 BSONCXX_PRIVATE_WARNINGS_DISABLE_IMPL_FOR_Clang(__VA_ARGS__)
177#define BSONCXX_PRIVATE_WARNINGS_DISABLE_IMPL_FOR_MSVC(...) \
178 BSONCXX_PRIVATE_IF_MSVC(BSONCXX_PRIVATE_PRAGMA(warning(disable : __VA_ARGS__)))
180#define BSONCXX_PRIVATE_FWD(...) static_cast<decltype(__VA_ARGS__)&&>(__VA_ARGS__)
182#define BSONCXX_PRIVATE_UNREACHABLE \