Wire Sysio
Wire Sysion 1.0.0
Loading...
Searching...
No Matches
catch_compiler_capabilities.h
Go to the documentation of this file.
1
/*
2
* Created by Phil on 15/04/2013.
3
* Copyright 2013 Two Blue Cubes Ltd. All rights reserved.
4
*
5
* Distributed under the Boost Software License, Version 1.0. (See accompanying
6
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7
*/
8
#ifndef TWOBLUECUBES_CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED
9
#define TWOBLUECUBES_CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED
10
11
// Detect a number of compiler features - by compiler
12
// The following features are defined:
13
//
14
// CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported?
15
// CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported?
16
// CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported?
17
// CATCH_CONFIG_DISABLE_EXCEPTIONS : Are exceptions enabled?
18
// ****************
19
// Note to maintainers: if new toggles are added please document them
20
// in configuration.md, too
21
// ****************
22
23
// In general each macro has a _NO_<feature name> form
24
// (e.g. CATCH_CONFIG_NO_POSIX_SIGNALS) which disables the feature.
25
// Many features, at point of detection, define an _INTERNAL_ macro, so they
26
// can be combined, en-mass, with the _NO_ forms later.
27
28
#include "
catch_platform.h
"
29
30
#ifdef __cplusplus
31
32
# if (__cplusplus >= 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L)
33
# define CATCH_CPP14_OR_GREATER
34
# endif
35
36
# if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
37
# define CATCH_CPP17_OR_GREATER
38
# endif
39
40
#endif
41
42
#if defined(CATCH_CPP17_OR_GREATER)
43
# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
44
#endif
45
46
#ifdef __clang__
47
48
# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
49
_Pragma( "clang diagnostic push" ) \
50
_Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \
51
_Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"")
52
# define CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \
53
_Pragma( "clang diagnostic pop" )
54
55
# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
56
_Pragma( "clang diagnostic push" ) \
57
_Pragma( "clang diagnostic ignored \"-Wparentheses\"" )
58
# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS \
59
_Pragma( "clang diagnostic pop" )
60
61
# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \
62
_Pragma( "clang diagnostic push" ) \
63
_Pragma( "clang diagnostic ignored \"-Wunused-variable\"" )
64
# define CATCH_INTERNAL_UNSUPPRESS_UNUSED_WARNINGS \
65
_Pragma( "clang diagnostic pop" )
66
67
#endif
// __clang__
68
69
71
// Assume that non-Windows platforms support posix signals by default
72
#if !defined(CATCH_PLATFORM_WINDOWS)
73
#define CATCH_INTERNAL_CONFIG_POSIX_SIGNALS
74
#endif
75
77
// We know some environments not to support full POSIX signals
78
#if defined(__CYGWIN__) || defined(__QNX__) || defined(__EMSCRIPTEN__) || defined(__DJGPP__)
79
#define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS
80
#endif
81
82
#ifdef __OS400__
83
# define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS
84
# define CATCH_CONFIG_COLOUR_NONE
85
#endif
86
88
// Android somehow still does not support std::to_string
89
#if defined(__ANDROID__)
90
# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING
91
#endif
92
94
// Not all Windows environments support SEH properly
95
#if defined(__MINGW32__)
96
# define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH
97
#endif
98
100
// PS4
101
#if defined(__ORBIS__)
102
# define CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE
103
#endif
104
106
// Cygwin
107
#ifdef __CYGWIN__
108
109
// Required for some versions of Cygwin to declare gettimeofday
110
// see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin
111
# define _BSD_SOURCE
112
// some versions of cygwin (most) do not support std::to_string. Use the libstd check.
113
// https://gcc.gnu.org/onlinedocs/gcc-4.8.2/libstdc++/api/a01053_source.html line 2812-2813
114
# if !((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
115
&& !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
116
117
# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING
118
119
# endif
120
#endif
// __CYGWIN__
121
123
// Visual C++
124
#ifdef _MSC_VER
125
126
127
# if _MSC_VER >= 1900
// Visual Studio 2015 or newer
128
# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
129
# endif
130
131
// Universal Windows platform does not support SEH
132
// Or console colours (or console at all...)
133
# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)
134
# define CATCH_CONFIG_COLOUR_NONE
135
# else
136
# define CATCH_INTERNAL_CONFIG_WINDOWS_SEH
137
# endif
138
139
// MSVC traditional preprocessor needs some workaround for __VA_ARGS__
140
// _MSVC_TRADITIONAL == 0 means new conformant preprocessor
141
// _MSVC_TRADITIONAL == 1 means old traditional non-conformant preprocessor
142
# if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL)
143
# define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
144
# endif
145
146
#endif
// _MSC_VER
147
149
// Check if we are compiled with -fno-exceptions or equivalent
150
#if defined(__EXCEPTIONS) || defined(__cpp_exceptions) || defined(_CPPUNWIND)
151
# define CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED
152
#endif
153
155
// DJGPP
156
#ifdef __DJGPP__
157
# define CATCH_INTERNAL_CONFIG_NO_WCHAR
158
#endif
// __DJGPP__
159
161
// Embarcadero C++Build
162
#if defined(__BORLANDC__)
163
#define CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN
164
#endif
165
167
168
// Use of __COUNTER__ is suppressed during code analysis in
169
// CLion/AppCode 2017.2.x and former, because __COUNTER__ is not properly
170
// handled by it.
171
// Otherwise all supported compilers support COUNTER macro,
172
// but user still might want to turn it off
173
#if ( !defined(__JETBRAINS_IDE__) || __JETBRAINS_IDE__ >= 20170300L )
174
#define CATCH_INTERNAL_CONFIG_COUNTER
175
#endif
176
178
// Check if string_view is available and usable
179
// The check is split apart to work around v140 (VS2015) preprocessor issue...
180
#if defined(__has_include)
181
#if __has_include(<string_view>) && defined(CATCH_CPP17_OR_GREATER)
182
# define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW
183
#endif
184
#endif
185
187
// Check if optional is available and usable
188
#if defined(__has_include)
189
# if __has_include(<optional>) && defined(CATCH_CPP17_OR_GREATER)
190
# define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL
191
# endif
// __has_include(<optional>) && defined(CATCH_CPP17_OR_GREATER)
192
#endif
// __has_include
193
195
// Check if variant is available and usable
196
#if defined(__has_include)
197
# if __has_include(<variant>) && defined(CATCH_CPP17_OR_GREATER)
198
# if defined(__clang__) && (__clang_major__ < 8)
199
// work around clang bug with libstdc++ https://bugs.llvm.org/show_bug.cgi?id=31852
200
// fix should be in clang 8, workaround in libstdc++ 8.2
201
# include <ciso646>
202
# if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9)
203
# define CATCH_CONFIG_NO_CPP17_VARIANT
204
# else
205
# define CATCH_INTERNAL_CONFIG_CPP17_VARIANT
206
# endif
// defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9)
207
# else
208
# define CATCH_INTERNAL_CONFIG_CPP17_VARIANT
209
# endif
// defined(__clang__) && (__clang_major__ < 8)
210
# endif
// __has_include(<variant>) && defined(CATCH_CPP17_OR_GREATER)
211
#endif
// __has_include
212
213
214
#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER)
215
# define CATCH_CONFIG_COUNTER
216
#endif
217
#if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) && !defined(CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH)
218
# define CATCH_CONFIG_WINDOWS_SEH
219
#endif
220
// This is set by default, because we assume that unix compilers are posix-signal-compatible by default.
221
#if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS)
222
# define CATCH_CONFIG_POSIX_SIGNALS
223
#endif
224
// This is set by default, because we assume that compilers with no wchar_t support are just rare exceptions.
225
#if !defined(CATCH_INTERNAL_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_WCHAR)
226
# define CATCH_CONFIG_WCHAR
227
#endif
228
229
#if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING)
230
# define CATCH_CONFIG_CPP11_TO_STRING
231
#endif
232
233
#if defined(CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_NO_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_CPP17_OPTIONAL)
234
# define CATCH_CONFIG_CPP17_OPTIONAL
235
#endif
236
237
#if defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
238
# define CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
239
#endif
240
241
#if defined(CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_NO_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_CPP17_STRING_VIEW)
242
# define CATCH_CONFIG_CPP17_STRING_VIEW
243
#endif
244
245
#if defined(CATCH_INTERNAL_CONFIG_CPP17_VARIANT) && !defined(CATCH_CONFIG_NO_CPP17_VARIANT) && !defined(CATCH_CONFIG_CPP17_VARIANT)
246
# define CATCH_CONFIG_CPP17_VARIANT
247
#endif
248
249
#if defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT)
250
# define CATCH_INTERNAL_CONFIG_NEW_CAPTURE
251
#endif
252
253
#if defined(CATCH_INTERNAL_CONFIG_NEW_CAPTURE) && !defined(CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NEW_CAPTURE)
254
# define CATCH_CONFIG_NEW_CAPTURE
255
#endif
256
257
#if !defined(CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
258
# define CATCH_CONFIG_DISABLE_EXCEPTIONS
259
#endif
260
261
#if defined(CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_NO_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_POLYFILL_ISNAN)
262
# define CATCH_CONFIG_POLYFILL_ISNAN
263
#endif
264
265
#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS)
266
# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS
267
# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS
268
#endif
269
#if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS)
270
# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS
271
# define CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS
272
#endif
273
#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS)
274
# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS
275
# define CATCH_INTERNAL_UNSUPPRESS_UNUSED_WARNINGS
276
#endif
277
278
#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
279
#define CATCH_TRY if ((true))
280
#define CATCH_CATCH_ALL if ((false))
281
#define CATCH_CATCH_ANON(type) if ((false))
282
#else
283
#define CATCH_TRY try
284
#define CATCH_CATCH_ALL catch (...)
285
#define CATCH_CATCH_ANON(type) catch (type)
286
#endif
287
288
#if defined(CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_NO_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR)
289
#define CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
290
#endif
291
292
#endif
// TWOBLUECUBES_CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED
293
catch_platform.h
libraries
sys-vm
external
Catch2
include
internal
catch_compiler_capabilities.h
Generated by
1.12.0