|
22 | 22 |
|
23 | 23 | // NB: A vast list valid identifiers is at these wiki pages:
|
24 | 24 | // http://sourceforge.net/p/predef/wiki/Home/
|
25 |
| - |
26 |
| -#undef GOOD_COMPILER_FOR_RCPP |
27 |
| -#ifdef __GNUC__ |
| 25 | +#if defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__clang__) || defined(__INTEL_COMPILER) |
28 | 26 | #define GOOD_COMPILER_FOR_RCPP
|
29 |
| -#endif |
30 |
| -#ifdef __SUNPRO_CC |
31 |
| -#define GOOD_COMPILER_FOR_RCPP |
32 |
| -#endif |
33 |
| -#ifdef __clang__ |
34 |
| -#define GOOD_COMPILER_FOR_RCPP |
35 |
| -#endif |
36 |
| -#ifdef __INTEL_COMPILER |
37 |
| -#define GOOD_COMPILER_FOR_RCPP |
38 |
| -#endif |
39 |
| - |
40 |
| -#ifndef GOOD_COMPILER_FOR_RCPP |
41 |
| -# error "This compiler is not supported" |
| 27 | +#else |
| 28 | +#error "This compiler is not supported" |
42 | 29 | #endif
|
43 | 30 |
|
| 31 | +// New simpler test and minimal standard: C++11 or else we die |
44 | 32 | #if __cplusplus < 201103L
|
45 |
| -# error "The C++ compilation standard is too old: use C++11 or newer." |
| 33 | +#error "The C++ compilation standard is too old: use C++11 or newer." |
46 | 34 | #endif
|
47 | 35 |
|
48 | 36 | #ifdef __GNUC__
|
49 | 37 | #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
|
50 | 38 | #endif
|
51 | 39 |
|
52 |
| -// TODO: Clean in a subsequent round |
53 |
| -#define RCPP_USING_CXX0X_OR_LATER |
54 |
| - |
55 |
| -// Check C++11 features (could/should work generally) |
56 |
| -#if defined(__INTEL_COMPILER) |
57 |
| - #define RCPP_USING_CXX11 |
58 |
| - #if __INTEL_COMPILER >= 1210 |
59 |
| - #define HAS_VARIADIC_TEMPLATES |
60 |
| - #endif |
61 |
| - #if __INTEL_COMPILER >= 1100 |
62 |
| - #define HAS_STATIC_ASSERT |
63 |
| - #endif |
64 |
| -#elif defined(__clang__) |
65 |
| - #define RCPP_USING_CXX11 |
66 |
| - #if __has_feature(cxx_variadic_templates) |
67 |
| - #define HAS_VARIADIC_TEMPLATES |
68 |
| - #endif |
69 |
| - #if __has_feature(cxx_static_assert) |
70 |
| - #define HAS_STATIC_ASSERT |
71 |
| - #endif |
72 |
| -#elif defined(__GNUC__) |
73 |
| - // given the check about __cplusplus we can unconditionally define |
74 |
| - #define RCPP_USING_CXX11 |
75 |
| - #define HAS_VARIADIC_TEMPLATES |
76 |
| - #define HAS_STATIC_ASSERT |
77 |
| -#endif |
78 |
| - |
79 | 40 | // C++11 features -- that used to be carefully tested for or worked around via CXX0X / TR1
|
| 41 | +#define RCPP_USING_CXX11 |
| 42 | +#define HAS_VARIADIC_TEMPLATES |
| 43 | +#define HAS_STATIC_ASSERT |
80 | 44 | #include <cmath>
|
81 | 45 | #define HAS_CXX0X_UNORDERED_MAP
|
82 | 46 | #define HAS_CXX0X_UNORDERED_SET
|
83 | 47 | #define HAS_CXX0X_INITIALIZER_LIST
|
84 |
| - |
85 |
| -// // Check TR1 Headers (TODO remove when no longer needed below) |
86 |
| -// #if defined(__INTEL_COMPILER) || (defined(__GNUC__) && !defined(__clang__)) |
87 |
| -// #define HAS_TR1_UNORDERED_MAP |
88 |
| -// #define HAS_TR1_UNORDERED_SET |
89 |
| -// #elif defined(__clang__) |
90 |
| -// #if __has_include(<tr1/unordered_map>) |
91 |
| -// #define HAS_TR1_UNORDERED_MAP |
92 |
| -// #endif |
93 |
| -// #if __has_include(<tr1/unordered_set>) |
94 |
| -// #define HAS_TR1_UNORDERED_SET |
95 |
| -// #endif |
96 |
| -// #endif |
97 |
| - |
98 |
| -// #if defined(HAS_TR1_UNORDERED_MAP) && defined(HAS_TR1_UNORDERED_SET) |
99 |
| -// #define HAS_TR1 |
100 |
| -// #endif |
101 |
| - |
102 |
| -// Conditionally include headers |
103 |
| -// #ifdef HAS_CXX0X_INITIALIZER_LIST |
104 | 48 | #include <initializer_list>
|
105 |
| -// #endif |
106 |
| - |
107 |
| -// // TODO: Simplify further: First case should work generally |
108 |
| -// #ifdef RCPP_USING_CXX11 |
109 |
| -// #if defined(HAS_CXX0X_UNORDERED_MAP) |
110 |
| - #include <unordered_map> |
111 |
| - #define RCPP_USING_UNORDERED_MAP |
112 |
| - #define RCPP_UNORDERED_MAP std::unordered_map |
113 |
| - // #else |
114 |
| - // #include <map> |
115 |
| - // #define RCPP_USING_MAP |
116 |
| - // #define RCPP_UNORDERED_MAP std::map |
117 |
| - // #endif |
118 |
| - // #if defined(HAS_CXX0X_UNORDERED_SET) |
119 |
| - #include <unordered_set> |
120 |
| - #define RCPP_USING_UNORDERED_SET |
121 |
| - #define RCPP_UNORDERED_SET std::unordered_set |
122 |
| - // #else |
123 |
| - // #include <set> |
124 |
| - // #define RCPP_USING_SET |
125 |
| - // #define RCPP_UNORDERED_SET std::set |
126 |
| - // #endif |
127 |
| -// #else |
128 |
| -// #if defined(HAS_TR1_UNORDERED_MAP) |
129 |
| -// #include <tr1/unordered_map> |
130 |
| -// #define RCPP_USING_TR1_UNORDERED_MAP |
131 |
| -// #define RCPP_UNORDERED_MAP std::tr1::unordered_map |
132 |
| -// // #else |
133 |
| -// // #include <map> |
134 |
| -// // #define RCPP_USING_MAP |
135 |
| -// // #define RCPP_UNORDERED_MAP std::map |
136 |
| -// #endif |
137 |
| -// #if defined(HAS_TR1_UNORDERED_SET) |
138 |
| -// #include <tr1/unordered_set> |
139 |
| -// #define RCPP_USING_TR1_UNORDERED_SET |
140 |
| -// #define RCPP_UNORDERED_SET std::tr1::unordered_set |
141 |
| -// // #else |
142 |
| -// // #include <set> |
143 |
| -// // #define RCPP_USING_SET |
144 |
| -// // #define RCPP_UNORDERED_SET std::set |
145 |
| -// #endif |
146 |
| -// #endif |
| 49 | +#include <unordered_map> |
| 50 | +#define RCPP_USING_UNORDERED_MAP |
| 51 | +#define RCPP_UNORDERED_MAP std::unordered_map |
| 52 | +#include <unordered_set> |
| 53 | +#define RCPP_USING_UNORDERED_SET |
| 54 | +#define RCPP_UNORDERED_SET std::unordered_set |
147 | 55 |
|
148 | 56 | #ifdef __GNUC__
|
149 | 57 | #define RCPP_HAS_DEMANGLING
|
150 | 58 | #endif
|
151 | 59 |
|
152 |
| - |
153 | 60 | #endif
|
0 commit comments