Skip to content

Commit e1d11f1

Browse files
committed
Reduced compiler.h to about a page of mostly defines and includes
1 parent 3c89b5b commit e1d11f1

File tree

1 file changed

+14
-107
lines changed

1 file changed

+14
-107
lines changed

inst/include/Rcpp/platform/compiler.h

+14-107
Original file line numberDiff line numberDiff line change
@@ -22,132 +22,39 @@
2222

2323
// NB: A vast list valid identifiers is at these wiki pages:
2424
// 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)
2826
#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"
4229
#endif
4330

31+
// New simpler test and minimal standard: C++11 or else we die
4432
#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."
4634
#endif
4735

4836
#ifdef __GNUC__
4937
#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
5038
#endif
5139

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-
7940
// 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
8044
#include <cmath>
8145
#define HAS_CXX0X_UNORDERED_MAP
8246
#define HAS_CXX0X_UNORDERED_SET
8347
#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
10448
#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
14755

14856
#ifdef __GNUC__
14957
#define RCPP_HAS_DEMANGLING
15058
#endif
15159

152-
15360
#endif

0 commit comments

Comments
 (0)