|
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