vSMC
vSMC: Scalable Monte Carlo
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
include
vsmc
internal
compiler
clang.hpp
Go to the documentation of this file.
1
//============================================================================
2
// vSMC/include/vsmc/internal/compiler/clang.hpp
3
//----------------------------------------------------------------------------
4
// vSMC: Scalable Monte Carlo
5
//----------------------------------------------------------------------------
6
// Copyright (c) 2013,2014, Yan Zhou
7
// All rights reserved.
8
//
9
// Redistribution and use in source and binary forms, with or without
10
// modification, are permitted provided that the following conditions are met:
11
//
12
// Redistributions of source code must retain the above copyright notice,
13
// this list of conditions and the following disclaimer.
14
//
15
// Redistributions in binary form must reproduce the above copyright notice,
16
// this list of conditions and the following disclaimer in the documentation
17
// and/or other materials provided with the distribution.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS
20
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
// POSSIBILITY OF SUCH DAMAGE.
30
//============================================================================
31
32
#ifndef VSMC_INTERNAL_COMPILER_CLANG_HPP
33
#define VSMC_INTERNAL_COMPILER_CLANG_HPP
34
35
#ifndef VSMC_HAS_CXX11_LONG_LONG
36
#define VSMC_HAS_CXX11_LONG_LONG 1
37
#endif
38
39
#define VSMC_CLANG_NONEXIST 0xFFFFFFFFUL
40
41
#define VSMC_CLANG_VERSION \
42
(__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
43
44
#define VSMC_LIBCPP_NONEXIST 0xFFFFFFFFUL
45
46
#ifdef _LIBCPP_VERSION
47
#define VSMC_LIBCPP_VERSION _LIBCPP_VERSION
48
#else
49
#define VSMC_LIBCPP_VERSION 0
50
#endif
51
52
#if __cplusplus >= 201103L
53
54
// C++11 language features
55
56
#if __has_feature(cxx_access_control_sfinae)
57
#ifndef VSMC_HAS_CXX11_ACCESS_CONTROL_SFINAE
58
#define VSMC_HAS_CXX11_ACCESS_CONTROL_SFINAE 1
59
#endif
60
#endif
61
62
#if __has_feature(cxx_alias_templates)
63
#ifndef VSMC_HAS_CXX11_ALIAS_TEMPLATES
64
#define VSMC_HAS_CXX11_ALIAS_TEMPLATES 1
65
#endif
66
#endif
67
68
#if __has_feature(cxx_alignas)
69
#ifndef VSMC_HAS_CXX11_ALIGNAS
70
#define VSMC_HAS_CXX11_ALIGNAS 1
71
#endif
72
#endif
73
74
#if __has_feature(cxx_attributes)
75
#ifndef VSMC_HAS_CXX11_ATTRIBUTES
76
#define VSMC_HAS_CXX11_ATTRIBUTES 1
77
#endif
78
#endif
79
80
#if __has_feature(cxx_auto_type)
81
#ifndef VSMC_HAS_CXX11_AUTO_TYPE
82
#define VSMC_HAS_CXX11_AUTO_TYPE 1
83
#endif
84
#endif
85
86
#if __has_feature(cxx_constexpr)
87
#ifndef VSMC_HAS_CXX11_CONSTEXPR
88
#define VSMC_HAS_CXX11_CONSTEXPR 1
89
#endif
90
#endif
91
92
#if __has_feature(cxx_decltype)
93
#ifndef VSMC_HAS_CXX11_DECLTYPE
94
#define VSMC_HAS_CXX11_DECLTYPE 1
95
#endif
96
#endif
97
98
#if __has_feature(cxx_default_function_template_args)
99
#ifndef VSMC_HAS_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS
100
#define VSMC_HAS_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS 1
101
#endif
102
#endif
103
104
#if __has_feature(cxx_defaulted_functions)
105
#ifndef VSMC_HAS_CXX11_DEFAULTED_FUNCTIONS
106
#define VSMC_HAS_CXX11_DEFAULTED_FUNCTIONS 1
107
#endif
108
#endif
109
110
#if __has_feature(cxx_delegating_constructors)
111
#ifndef VSMC_HAS_CXX11_DELEGATING_CONSTRUCTORS
112
#define VSMC_HAS_CXX11_DELEGATING_CONSTRUCTORS 1
113
#endif
114
#endif
115
116
#if __has_feature(cxx_deleted_functions)
117
#ifndef VSMC_HAS_CXX11_DELETED_FUNCTIONS
118
#define VSMC_HAS_CXX11_DELETED_FUNCTIONS 1
119
#endif
120
#endif
121
122
#if __has_feature(cxx_explicit_conversions)
123
#ifndef VSMC_HAS_CXX11_EXPLICIT_CONVERSIONS
124
#define VSMC_HAS_CXX11_EXPLICIT_CONVERSIONS 1
125
#endif
126
#endif
127
128
#if __has_feature(cxx_generalized_initializers)
129
#ifndef VSMC_HAS_CXX11_GENERALIZED_INITIALIZERS
130
#define VSMC_HAS_CXX11_GENERALIZED_INITIALIZERS 1
131
#endif
132
#endif
133
134
#if __has_feature(cxx_implicit_moves)
135
#ifndef VSMC_HAS_CXX11_IMPLICIT_MOVES
136
#define VSMC_HAS_CXX11_IMPLICIT_MOVES 1
137
#endif
138
#endif
139
140
#if __has_feature(cxx_inheriting_constructors)
141
#ifndef VSMC_HAS_CXX11_INHERITING_CONSTRUCTORS
142
#define VSMC_HAS_CXX11_INHERITING_CONSTRUCTORS 1
143
#endif
144
#endif
145
146
#if __has_feature(cxx_inline_namespaces)
147
#ifndef VSMC_HAS_CXX11_INLINE_NAMESPACES
148
#define VSMC_HAS_CXX11_INLINE_NAMESPACES 1
149
#endif
150
#endif
151
152
#if __has_feature(cxx_lambdas)
153
#ifndef VSMC_HAS_CXX11_LAMBDAS
154
#define VSMC_HAS_CXX11_LAMBDAS 1
155
#endif
156
#endif
157
158
#if __has_feature(cxx_local_type_template_args)
159
#ifndef VSMC_HAS_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
160
#define VSMC_HAS_CXX11_LOCAL_TYPE_TEMPLATE_ARGS 1
161
#endif
162
#endif
163
164
#if __has_feature(cxx_noexcept)
165
#ifndef VSMC_HAS_CXX11_NOEXCEPT
166
#define VSMC_HAS_CXX11_NOEXCEPT 1
167
#endif
168
#endif
169
170
#if __has_feature(cxx_nonstatic_member_init)
171
#ifndef VSMC_HAS_CXX11_NONSTATIC_MEMBER_INIT
172
#define VSMC_HAS_CXX11_NONSTATIC_MEMBER_INIT 1
173
#endif
174
#endif
175
176
#if __has_feature(cxx_nullptr)
177
#ifndef VSMC_HAS_CXX11_NULLPTR
178
#define VSMC_HAS_CXX11_NULLPTR 1
179
#endif
180
#endif
181
182
#if __has_feature(cxx_override_control)
183
#ifndef VSMC_HAS_CXX11_OVERRIDE_CONTROL
184
#define VSMC_HAS_CXX11_OVERRIDE_CONTROL 1
185
#endif
186
#endif
187
188
#if __has_feature(cxx_range_for)
189
#ifndef VSMC_HAS_CXX11_RANGE_FOR
190
#define VSMC_HAS_CXX11_RANGE_FOR 1
191
#endif
192
#endif
193
194
#if __has_feature(cxx_raw_string_literals)
195
#ifndef VSMC_HAS_CXX11_RAW_STRING_LITERALS
196
#define VSMC_HAS_CXX11_RAW_STRING_LITERALS 1
197
#endif
198
#endif
199
200
#if __has_feature(cxx_reference_qualified_functions)
201
#ifndef VSMC_HAS_CXX11_REFERENCE_QUALIFIED_FUNCTIONS
202
#define VSMC_HAS_CXX11_REFERENCE_QUALIFIED_FUNCTIONS 1
203
#endif
204
#endif
205
206
#if __has_feature(cxx_rvalue_references)
207
#ifndef VSMC_HAS_CXX11_RVALUE_REFERENCES
208
#define VSMC_HAS_CXX11_RVALUE_REFERENCES 1
209
#endif
210
#endif
211
212
#if __has_feature(cxx_static_assert)
213
#ifndef VSMC_HAS_CXX11_STATIC_ASSERT
214
#define VSMC_HAS_CXX11_STATIC_ASSERT 1
215
#endif
216
#endif
217
218
#if __has_feature(cxx_strong_enums)
219
#ifndef VSMC_HAS_CXX11_STRONG_ENUMS
220
#define VSMC_HAS_CXX11_STRONG_ENUMS 1
221
#endif
222
#endif
223
224
#if __has_feature(cxx_thread_local)
225
#ifndef VSMC_HAS_CXX11_THREAD_LOCAL
226
#define VSMC_HAS_CXX11_THREAD_LOCAL 1
227
#endif
228
#endif
229
230
#if __has_feature(cxx_trailing_return)
231
#ifndef VSMC_HAS_CXX11_TRAILING_RETURN
232
#define VSMC_HAS_CXX11_TRAILING_RETURN 1
233
#endif
234
#endif
235
236
#if __has_feature(cxx_unicode_literals)
237
#ifndef VSMC_HAS_CXX11_UNICODE_LITERALS
238
#define VSMC_HAS_CXX11_UNICODE_LITERALS 1
239
#endif
240
#endif
241
242
#if __has_feature(cxx_unrestricted_unions)
243
#ifndef VSMC_HAS_CXX11_UNRESTRICTED_UNIONS
244
#define VSMC_HAS_CXX11_UNRESTRICTED_UNIONS 1
245
#endif
246
#endif
247
248
#if __has_feature(cxx_user_literals)
249
#ifndef VSMC_HAS_CXX11_USER_LITERALS
250
#define VSMC_HAS_CXX11_USER_LITERALS 1
251
#endif
252
#endif
253
254
#if __has_feature(cxx_variadic_templates)
255
#ifndef VSMC_HAS_CXX11_VARIADIC_TEMPLATES
256
#define VSMC_HAS_CXX11_VARIADIC_TEMPLATES 1
257
#endif
258
#endif
259
260
// C++11 library features
261
262
#if VSMC_LIBCPP_VERSION >= 1101
263
#ifndef VSMC_HAS_CXX11LIB_ALGORITHM
264
#define VSMC_HAS_CXX11LIB_ALGORITHM 1
265
#endif
266
#endif
267
268
#if VSMC_LIBCPP_VERSION >= 1101
269
#ifndef VSMC_HAS_CXX11LIB_CHRONO
270
#define VSMC_HAS_CXX11LIB_CHRONO 1
271
#endif
272
#endif
273
274
#if VSMC_LIBCPP_VERSION >= 1101
275
#ifndef VSMC_HAS_CXX11LIB_CMATH
276
#define VSMC_HAS_CXX11LIB_CMATH 1
277
#endif
278
#endif
279
280
#if VSMC_LIBCPP_VERSION >= 1101
281
#ifndef VSMC_HAS_CXX11LIB_FUNCTIONAL
282
#define VSMC_HAS_CXX11LIB_FUNCTIONAL 1
283
#endif
284
#endif
285
286
#if VSMC_LIBCPP_VERSION >= 1101
287
#ifndef VSMC_HAS_CXX11LIB_FUTURE
288
#define VSMC_HAS_CXX11LIB_FUTURE 1
289
#endif
290
#endif
291
292
#if VSMC_LIBCPP_VERSION >= 1101
293
#ifndef VSMC_HAS_CXX11LIB_INITIALIZER_LIST
294
#define VSMC_HAS_CXX11LIB_INITIALIZER_LIST 1
295
#endif
296
#endif
297
298
#if VSMC_LIBCPP_VERSION >= 1101
299
#ifndef VSMC_HAS_CXX11LIB_MUTEX
300
#define VSMC_HAS_CXX11LIB_MUTEX 1
301
#endif
302
#endif
303
304
#if VSMC_LIBCPP_VERSION >= 1101
305
#ifndef VSMC_HAS_CXX11LIB_RANDOM
306
#define VSMC_HAS_CXX11LIB_RANDOM 1
307
#endif
308
#endif
309
310
#if VSMC_LIBCPP_VERSION >= 1101
311
#ifndef VSMC_HAS_CXX11LIB_THREAD
312
#define VSMC_HAS_CXX11LIB_THREAD 1
313
#endif
314
#endif
315
316
#if VSMC_LIBCPP_VERSION >= 1101
317
#ifndef VSMC_HAS_CXX11LIB_TUPLE
318
#define VSMC_HAS_CXX11LIB_TUPLE 1
319
#endif
320
#endif
321
322
#endif // __cplusplus >= 201103L
323
324
#if __cplusplus >= 201402L
325
326
// C++14 language features
327
328
#if __has_feature(cxx_aggregate_nsdmi)
329
#ifndef VSMC_HAS_CXX14_AGGREGATE_NSDMI
330
#define VSMC_HAS_CXX14_AGGREGATE_NSDMI 1
331
#endif
332
#endif
333
334
#if __has_feature(cxx_binary_literals)
335
#ifndef VSMC_HAS_CXX14_BINARY_LITERALS
336
#define VSMC_HAS_CXX14_BINARY_LITERALS 1
337
#endif
338
#endif
339
340
#if __has_feature(cxx_contextual_conversions)
341
#ifndef VSMC_HAS_CXX14_CONTEXTUAL_CONVERSIONS
342
#define VSMC_HAS_CXX14_CONTEXTUAL_CONVERSIONS 1
343
#endif
344
#endif
345
346
#if __has_feature(cxx_decltype_auto)
347
#ifndef VSMC_HAS_CXX14_DECLTYPE_AUTO
348
#define VSMC_HAS_CXX14_DECLTYPE_AUTO 1
349
#endif
350
#endif
351
352
#if __has_feature(cxx_digit_seperators)
353
#ifndef VSMC_HAS_CXX14_DIGIT_SEPERATORS
354
#define VSMC_HAS_CXX14_DIGIT_SEPERATORS 1
355
#endif
356
#endif
357
358
#if __has_feature(cxx_generic_lambdas)
359
#ifndef VSMC_HAS_CXX14_GENERIC_LAMBDAS
360
#define VSMC_HAS_CXX14_GENERIC_LAMBDAS 1
361
#endif
362
#endif
363
364
#if __has_feature(cxx_init_captures)
365
#ifndef VSMC_HAS_CXX14_INIT_CAPTURES
366
#define VSMC_HAS_CXX14_INIT_CAPTURES 1
367
#endif
368
#endif
369
370
#if __has_feature(cxx_relaxed_constexpr)
371
#ifndef VSMC_HAS_CXX14_RELAXED_CONSTEXPR
372
#define VSMC_HAS_CXX14_RELAXED_CONSTEXPR 1
373
#endif
374
#endif
375
376
#if __has_feature(cxx_return_type_deduction)
377
#ifndef VSMC_HAS_CXX14_RETURN_TYPE_DEDUCTION
378
#define VSMC_HAS_CXX14_RETURN_TYPE_DEDUCTION 1
379
#endif
380
#endif
381
382
#if __has_feature(cxx_runtime_sized_arrays)
383
#ifndef VSMC_HAS_CXX14_RUNTIME_SIZED_ARRAYS
384
#define VSMC_HAS_CXX14_RUNTIME_SIZED_ARRAYS 1
385
#endif
386
#endif
387
388
#if __has_feature(cxx_variable_templates)
389
#ifndef VSMC_HAS_CXX14_VARIABLE_TEMPLATES
390
#define VSMC_HAS_CXX14_VARIABLE_TEMPLATES 1
391
#endif
392
#endif
393
394
#endif // __cplusplus >= 201402L
395
396
// C99 library features
397
398
#ifndef VSMC_HAS_C99LIB_MATH
399
#define VSMC_HAS_C99LIB_MATH 1
400
#endif
401
402
// Compiler features
403
404
#ifndef VSMC_INT64
405
#define VSMC_INT64 long long
406
#endif
407
408
#ifdef __x86_64__
409
#ifndef VSMC_HAS_INT128
410
#define VSMC_HAS_INT128 1
411
#endif
412
#ifndef VSMC_INT128
413
#define VSMC_INT128 __int128
414
#endif
415
#endif
416
417
#ifndef VSMC_HAS_WARNING
418
#define VSMC_HAS_WARNING 1
419
#endif
420
421
#ifndef VSMC_STRONG_INLINE
422
#if __has_attribute(always_inline)
423
#define VSMC_STRONG_INLINE __attribute__((always_inline)) inline
424
#endif
425
#endif
426
427
// Target specific features
428
429
#ifdef __AES__
430
#ifndef VSMC_HAS_AES_NI
431
#define VSMC_HAS_AES_NI 1
432
#endif
433
#endif
434
435
#ifdef __RDRND__
436
#ifndef VSMC_HAS_RDRAND
437
#define VSMC_HAS_RDRAND 1
438
#endif
439
#endif
440
441
#endif // VSMC_INTERNAL_COMPILER_CLANG_HPP
Generated by
1.8.9.1