| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 1 | // -*- C++ -*- | 
 | 2 | //===--------------------------- __config ---------------------------------===// | 
 | 3 | // | 
| Howard Hinnant | f5256e1 | 2010-05-11 21:36:01 | [diff] [blame] | 4 | // The LLVM Compiler Infrastructure | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 5 | // | 
| Howard Hinnant | b64f8b0 | 2010-11-16 22:09:02 | [diff] [blame] | 6 | // This file is dual licensed under the MIT and the University of Illinois Open | 
 | 7 | // Source Licenses. See LICENSE.TXT for details. | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 8 | // | 
 | 9 | //===----------------------------------------------------------------------===// | 
 | 10 |  | 
 | 11 | #ifndef _LIBCPP_CONFIG | 
 | 12 | #define _LIBCPP_CONFIG | 
 | 13 |  | 
| Eric Fiselier | 38e7a30 | 2015-11-06 06:30:12 | [diff] [blame] | 14 | #if defined(_MSC_VER) && !defined(__clang__) | 
 | 15 | #define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER | 
 | 16 | #endif | 
 | 17 |  | 
 | 18 | #ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 19 | #pragma GCC system_header | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 20 | #endif | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 21 |  | 
| Eric Fiselier | 38e7a30 | 2015-11-06 06:30:12 | [diff] [blame] | 22 | #ifdef __cplusplus | 
 | 23 |  | 
| Howard Hinnant | 75536ba | 2012-10-03 20:48:05 | [diff] [blame] | 24 | #ifdef __GNUC__ | 
 | 25 | #define _GNUC_VER (__GNUC__ * 100 + __GNUC_MINOR__) | 
| Eric Fiselier | eeeada1 | 2015-06-13 02:18:44 | [diff] [blame] | 26 | #else | 
 | 27 | #define _GNUC_VER 0 | 
| Howard Hinnant | 75536ba | 2012-10-03 20:48:05 | [diff] [blame] | 28 | #endif | 
 | 29 |  | 
| Marshall Clow | fc8847c | 2016-07-18 20:27:19 | [diff] [blame] | 30 | #define _LIBCPP_VERSION 4000 | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 31 |  | 
| Evgeniy Stepanov | 4f01aa8 | 2015-10-13 23:48:28 | [diff] [blame] | 32 | #ifndef _LIBCPP_ABI_VERSION | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 33 | #define _LIBCPP_ABI_VERSION 1 | 
| Evgeniy Stepanov | 4f01aa8 | 2015-10-13 23:48:28 | [diff] [blame] | 34 | #endif | 
 | 35 |  | 
 | 36 | #if defined(_LIBCPP_ABI_UNSTABLE) || _LIBCPP_ABI_VERSION >= 2 | 
| Eric Fiselier | 1deaf19 | 2016-09-25 03:14:13 | [diff] [blame^] | 37 | #define _LIBCPP_ABI_EXTERN_TEMPLATE_SYMBOLS_VERSION 2 | 
| Shoaib Meenai | b6b8e1e | 2016-09-12 20:14:44 | [diff] [blame] | 38 | // Change short string representation so that string data starts at offset 0, | 
| Evgeniy Stepanov | 746572b | 2015-11-06 22:02:29 | [diff] [blame] | 39 | // improving its alignment in some cases. | 
| Evgeniy Stepanov | 4f01aa8 | 2015-10-13 23:48:28 | [diff] [blame] | 40 | #define _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT | 
| Evgeniy Stepanov | 746572b | 2015-11-06 22:02:29 | [diff] [blame] | 41 | // Fix deque iterator type in order to support incomplete types. | 
 | 42 | #define _LIBCPP_ABI_INCOMPLETE_TYPES_IN_DEQUE | 
| Eric Fiselier | 5c74b48 | 2015-12-30 20:57:59 | [diff] [blame] | 43 | // Fix undefined behavior in how std::list stores it's linked nodes. | 
 | 44 | #define _LIBCPP_ABI_LIST_REMOVE_NODE_POINTER_UB | 
| Eric Fiselier | 7310ec8 | 2016-07-19 17:56:20 | [diff] [blame] | 45 | // Fix undefined behavior in how __tree stores its end and parent nodes. | 
 | 46 | #define _LIBCPP_ABI_TREE_REMOVE_NODE_POINTER_UB | 
| Eric Fiselier | f653588 | 2016-07-23 20:36:55 | [diff] [blame] | 47 | // Fix undefined behavior in how __hash_table stores it's pointer types | 
 | 48 | #define _LIBCPP_ABI_FIX_UNORDERED_NODE_POINTER_UB | 
| Eric Fiselier | de637db | 2016-01-27 00:11:54 | [diff] [blame] | 49 | #define _LIBCPP_ABI_FORWARD_LIST_REMOVE_NODE_POINTER_UB | 
| Eric Fiselier | 774c7c5 | 2016-02-10 20:46:23 | [diff] [blame] | 50 | #define _LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE | 
| Eric Fiselier | 10b52a0 | 2016-06-14 03:48:09 | [diff] [blame] | 51 | #define _LIBCPP_ABI_VARIADIC_LOCK_GUARD | 
| Eric Fiselier | c71c304 | 2016-07-18 01:58:37 | [diff] [blame] | 52 | #elif _LIBCPP_ABI_VERSION == 1 | 
| Eric Fiselier | 1deaf19 | 2016-09-25 03:14:13 | [diff] [blame^] | 53 | #define _LIBCPP_ABI_EXTERN_TEMPLATE_SYMBOLS_VERSION 1 | 
| Eric Fiselier | c71c304 | 2016-07-18 01:58:37 | [diff] [blame] | 54 | // Feature macros for disabling pre ABI v1 features. All of these options | 
 | 55 | // are deprecated. | 
 | 56 | #if defined(__FreeBSD__) | 
 | 57 | #define _LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR | 
 | 58 | #endif | 
 | 59 | #endif | 
 | 60 |  | 
 | 61 | #ifdef _LIBCPP_TRIVIAL_PAIR_COPY_CTOR | 
 | 62 | #error "_LIBCPP_TRIVIAL_PAIR_COPY_CTOR" is no longer supported. \ | 
 | 63 |  use _LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR instead | 
| Evgeniy Stepanov | 4f01aa8 | 2015-10-13 23:48:28 | [diff] [blame] | 64 | #endif | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 65 |  | 
 | 66 | #define _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_X##_LIBCPP_Y | 
 | 67 | #define _LIBCPP_CONCAT(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) | 
 | 68 |  | 
 | 69 | #define _LIBCPP_NAMESPACE _LIBCPP_CONCAT(__,_LIBCPP_ABI_VERSION) | 
 | 70 |  | 
| Eric Fiselier | 8f7fe5c | 2015-07-10 20:26:38 | [diff] [blame] | 71 |  | 
 | 72 | #ifndef __has_attribute | 
 | 73 | #define __has_attribute(__x) 0 | 
 | 74 | #endif | 
 | 75 | #ifndef __has_builtin | 
 | 76 | #define __has_builtin(__x) 0 | 
 | 77 | #endif | 
| Eric Fiselier | 00f4a49 | 2015-08-19 17:21:46 | [diff] [blame] | 78 | #ifndef __has_extension | 
 | 79 | #define __has_extension(__x) 0 | 
 | 80 | #endif | 
| Eric Fiselier | 8f7fe5c | 2015-07-10 20:26:38 | [diff] [blame] | 81 | #ifndef __has_feature | 
 | 82 | #define __has_feature(__x) 0 | 
 | 83 | #endif | 
 | 84 | // '__is_identifier' returns '0' if '__x' is a reserved identifier provided by | 
 | 85 | // the compiler and '1' otherwise. | 
 | 86 | #ifndef __is_identifier | 
 | 87 | #define __is_identifier(__x) 1 | 
 | 88 | #endif | 
 | 89 |  | 
| Dan Albert | 7d7f3cc | 2016-09-19 18:00:45 | [diff] [blame] | 90 | // Need to detect which libc we're using if we're on Linux. | 
 | 91 | #if defined(__linux__) | 
 | 92 | #include <features.h> | 
 | 93 | #if !defined(__GLIBC_PREREQ) | 
 | 94 | #define __GLIBC_PREREQ(a, b) 0 | 
 | 95 | #endif // !defined(__GLIBC_PREREQ) | 
 | 96 | #endif // defined(__linux__) | 
| Eric Fiselier | 8f7fe5c | 2015-07-10 20:26:38 | [diff] [blame] | 97 |  | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 98 | #ifdef __LITTLE_ENDIAN__ | 
 | 99 | #if __LITTLE_ENDIAN__ | 
 | 100 | #define _LIBCPP_LITTLE_ENDIAN 1 | 
 | 101 | #define _LIBCPP_BIG_ENDIAN 0 | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 102 | #endif // __LITTLE_ENDIAN__ | 
 | 103 | #endif // __LITTLE_ENDIAN__ | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 104 |  | 
 | 105 | #ifdef __BIG_ENDIAN__ | 
 | 106 | #if __BIG_ENDIAN__ | 
 | 107 | #define _LIBCPP_LITTLE_ENDIAN 0 | 
 | 108 | #define _LIBCPP_BIG_ENDIAN 1 | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 109 | #endif // __BIG_ENDIAN__ | 
 | 110 | #endif // __BIG_ENDIAN__ | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 111 |  | 
| Dan Albert | 2897e78 | 2015-09-16 18:10:47 | [diff] [blame] | 112 | #ifdef __BYTE_ORDER__ | 
 | 113 | #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ | 
 | 114 | #define _LIBCPP_LITTLE_ENDIAN 1 | 
 | 115 | #define _LIBCPP_BIG_ENDIAN 0 | 
 | 116 | #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ | 
 | 117 | #define _LIBCPP_LITTLE_ENDIAN 0 | 
 | 118 | #define _LIBCPP_BIG_ENDIAN 1 | 
 | 119 | #endif // __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ | 
 | 120 | #endif // __BYTE_ORDER__ | 
 | 121 |  | 
| David Chisnall | 3e13d4f | 2010-08-11 16:27:20 | [diff] [blame] | 122 | #ifdef __FreeBSD__ | 
 | 123 | # include <sys/endian.h> | 
 | 124 | # if _BYTE_ORDER == _LITTLE_ENDIAN | 
 | 125 | # define _LIBCPP_LITTLE_ENDIAN 1 | 
 | 126 | # define _LIBCPP_BIG_ENDIAN 0 | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 127 | # else // _BYTE_ORDER == _LITTLE_ENDIAN | 
| David Chisnall | 3e13d4f | 2010-08-11 16:27:20 | [diff] [blame] | 128 | # define _LIBCPP_LITTLE_ENDIAN 0 | 
 | 129 | # define _LIBCPP_BIG_ENDIAN 1 | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 130 | # endif // _BYTE_ORDER == _LITTLE_ENDIAN | 
| Howard Hinnant | 8a9c5ea | 2012-11-26 21:18:17 | [diff] [blame] | 131 | # ifndef __LONG_LONG_SUPPORTED | 
 | 132 | # define _LIBCPP_HAS_NO_LONG_LONG | 
 | 133 | # endif // __LONG_LONG_SUPPORTED | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 134 | #endif // __FreeBSD__ | 
| David Chisnall | 3e13d4f | 2010-08-11 16:27:20 | [diff] [blame] | 135 |  | 
| Joerg Sonnenberger | a71a952 | 2013-05-17 21:17:34 | [diff] [blame] | 136 | #ifdef __NetBSD__ | 
 | 137 | # include <sys/endian.h> | 
 | 138 | # if _BYTE_ORDER == _LITTLE_ENDIAN | 
 | 139 | # define _LIBCPP_LITTLE_ENDIAN 1 | 
 | 140 | # define _LIBCPP_BIG_ENDIAN 0 | 
 | 141 | # else // _BYTE_ORDER == _LITTLE_ENDIAN | 
 | 142 | # define _LIBCPP_LITTLE_ENDIAN 0 | 
 | 143 | # define _LIBCPP_BIG_ENDIAN 1 | 
 | 144 | # endif // _BYTE_ORDER == _LITTLE_ENDIAN | 
 | 145 | # define _LIBCPP_HAS_QUICK_EXIT | 
 | 146 | #endif // __NetBSD__ | 
 | 147 |  | 
| Howard Hinnant | 11a58a6 | 2011-05-13 17:16:06 | [diff] [blame] | 148 | #ifdef _WIN32 | 
 | 149 | # define _LIBCPP_LITTLE_ENDIAN 1 | 
 | 150 | # define _LIBCPP_BIG_ENDIAN 0 | 
| Eric Fiselier | 3a0e430 | 2015-06-13 07:08:02 | [diff] [blame] | 151 | // Compiler intrinsics (MSVC) | 
 | 152 | #if defined(_MSC_VER) && _MSC_VER >= 1400 | 
| Howard Hinnant | e9df0a5 | 2013-08-01 18:17:34 | [diff] [blame] | 153 | # define _LIBCPP_HAS_IS_BASE_OF | 
| Howard Hinnant | 92a0700 | 2011-09-22 19:10:18 | [diff] [blame] | 154 | # endif | 
| Howard Hinnant | e9df0a5 | 2013-08-01 18:17:34 | [diff] [blame] | 155 | # if defined(_MSC_VER) && !defined(__clang__) | 
 | 156 | # define _LIBCPP_MSVC // Using Microsoft Visual C++ compiler | 
| Howard Hinnant | f755506 | 2013-10-04 21:14:44 | [diff] [blame] | 157 | # define _LIBCPP_TOSTRING2(x) #x | 
 | 158 | # define _LIBCPP_TOSTRING(x) _LIBCPP_TOSTRING2(x) | 
 | 159 | # define _LIBCPP_WARNING(x) __pragma(message(__FILE__ "(" _LIBCPP_TOSTRING(__LINE__) ") : warning note: " x)) | 
| Howard Hinnant | e9df0a5 | 2013-08-01 18:17:34 | [diff] [blame] | 160 | # endif | 
| Howard Hinnant | ef5aa93 | 2013-09-17 01:34:47 | [diff] [blame] | 161 | # // If mingw not explicitly detected, assume using MS C runtime only. | 
 | 162 | # ifndef __MINGW32__ | 
 | 163 | # define _LIBCPP_MSVCRT // Using Microsoft's C Runtime library | 
 | 164 | # endif | 
| Howard Hinnant | 11a58a6 | 2011-05-13 17:16:06 | [diff] [blame] | 165 | #endif // _WIN32 | 
 | 166 |  | 
| David Chisnall | 997e454 | 2012-02-29 13:05:08 | [diff] [blame] | 167 | #ifdef __sun__ | 
 | 168 | # include <sys/isa_defs.h> | 
 | 169 | # ifdef _LITTLE_ENDIAN | 
 | 170 | # define _LIBCPP_LITTLE_ENDIAN 1 | 
 | 171 | # define _LIBCPP_BIG_ENDIAN 0 | 
 | 172 | # else | 
 | 173 | # define _LIBCPP_LITTLE_ENDIAN 0 | 
 | 174 | # define _LIBCPP_BIG_ENDIAN 1 | 
 | 175 | # endif | 
 | 176 | #endif // __sun__ | 
 | 177 |  | 
| Ed Schouten | 63e70b6 | 2015-03-10 07:46:06 | [diff] [blame] | 178 | #if defined(__CloudABI__) | 
 | 179 |  // Certain architectures provide arc4random(). Prefer using | 
 | 180 |  // arc4random() over /dev/{u,}random to make it possible to obtain | 
 | 181 |  // random data even when using sandboxing mechanisms such as chroots, | 
 | 182 |  // Capsicum, etc. | 
 | 183 | # define _LIBCPP_USING_ARC4_RANDOM | 
 | 184 | #elif defined(__native_client__) | 
| JF Bastien | 2bd5ffd | 2014-12-01 19:19:55 | [diff] [blame] | 185 |  // NaCl's sandbox (which PNaCl also runs in) doesn't allow filesystem access, | 
 | 186 |  // including accesses to the special files under /dev. C++11's | 
 | 187 |  // std::random_device is instead exposed through a NaCl syscall. | 
 | 188 | # define _LIBCPP_USING_NACL_RANDOM | 
| Ed Schouten | 63e70b6 | 2015-03-10 07:46:06 | [diff] [blame] | 189 | #elif defined(_WIN32) | 
 | 190 | # define _LIBCPP_USING_WIN32_RANDOM | 
 | 191 | #else | 
 | 192 | # define _LIBCPP_USING_DEV_RANDOM | 
 | 193 | #endif | 
| JF Bastien | 2bd5ffd | 2014-12-01 19:19:55 | [diff] [blame] | 194 |  | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 195 | #if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) | 
| Howard Hinnant | adff489 | 2010-05-24 17:49:41 | [diff] [blame] | 196 | # include <endian.h> | 
 | 197 | # if __BYTE_ORDER == __LITTLE_ENDIAN | 
 | 198 | # define _LIBCPP_LITTLE_ENDIAN 1 | 
 | 199 | # define _LIBCPP_BIG_ENDIAN 0 | 
 | 200 | # elif __BYTE_ORDER == __BIG_ENDIAN | 
 | 201 | # define _LIBCPP_LITTLE_ENDIAN 0 | 
 | 202 | # define _LIBCPP_BIG_ENDIAN 1 | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 203 | # else // __BYTE_ORDER == __BIG_ENDIAN | 
| Howard Hinnant | adff489 | 2010-05-24 17:49:41 | [diff] [blame] | 204 | # error unable to determine endian | 
 | 205 | # endif | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 206 | #endif // !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 207 |  | 
| Evgeniy Stepanov | 45dca2c | 2016-02-10 21:53:28 | [diff] [blame] | 208 | #if __has_attribute(__no_sanitize__) | 
 | 209 | #define _LIBCPP_NO_CFI __attribute__((__no_sanitize__("cfi"))) | 
 | 210 | #else | 
 | 211 | #define _LIBCPP_NO_CFI | 
 | 212 | #endif | 
 | 213 |  | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 214 | #if defined(__clang__) | 
 | 215 |  | 
| Evgeniy Stepanov | 4f01aa8 | 2015-10-13 23:48:28 | [diff] [blame] | 216 | // _LIBCPP_ALTERNATE_STRING_LAYOUT is an old name for | 
 | 217 | // _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT left here for backward compatibility. | 
 | 218 | #if (defined(__APPLE__) && !defined(__i386__) && !defined(__x86_64__) && \ | 
 | 219 |  !defined(__arm__)) || \ | 
 | 220 |  defined(_LIBCPP_ALTERNATE_STRING_LAYOUT) | 
 | 221 | #define _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT | 
| Tim Northover | c030063 | 2014-03-30 11:34:22 | [diff] [blame] | 222 | #endif | 
 | 223 |  | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 224 | #if __has_feature(cxx_alignas) | 
| Howard Hinnant | cbdd089 | 2012-05-31 19:31:14 | [diff] [blame] | 225 | # define _ALIGNAS_TYPE(x) alignas(x) | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 226 | # define _ALIGNAS(x) alignas(x) | 
 | 227 | #else | 
| Howard Hinnant | 6467aeb | 2012-05-31 20:14:00 | [diff] [blame] | 228 | # define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 229 | # define _ALIGNAS(x) __attribute__((__aligned__(x))) | 
 | 230 | #endif | 
 | 231 |  | 
| Howard Hinnant | 19ce6a4 | 2011-05-26 19:07:54 | [diff] [blame] | 232 | #if !__has_feature(cxx_alias_templates) | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 233 | #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES | 
| Howard Hinnant | 19ce6a4 | 2011-05-26 19:07:54 | [diff] [blame] | 234 | #endif | 
| Howard Hinnant | 87eea6d | 2010-09-07 20:31:18 | [diff] [blame] | 235 |  | 
| Marshall Clow | 4ffb67e | 2014-02-22 15:13:48 | [diff] [blame] | 236 | #if __cplusplus < 201103L | 
| Howard Hinnant | 3975ebd | 2010-09-16 23:27:26 | [diff] [blame] | 237 | typedef __char16_t char16_t; | 
 | 238 | typedef __char32_t char32_t; | 
| Howard Hinnant | 87eea6d | 2010-09-07 20:31:18 | [diff] [blame] | 239 | #endif | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 240 |  | 
| Weiming Zhao | 994fb96 | 2016-04-21 05:28:18 | [diff] [blame] | 241 | #if !(__has_feature(cxx_exceptions)) && !defined(_LIBCPP_NO_EXCEPTIONS) | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 242 | #define _LIBCPP_NO_EXCEPTIONS | 
 | 243 | #endif | 
 | 244 |  | 
| Howard Hinnant | d444470 | 2010-08-11 17:04:31 | [diff] [blame] | 245 | #if !(__has_feature(cxx_rtti)) | 
 | 246 | #define _LIBCPP_NO_RTTI | 
 | 247 | #endif | 
 | 248 |  | 
| Howard Hinnant | f6d875f | 2011-12-02 19:36:40 | [diff] [blame] | 249 | #if !(__has_feature(cxx_strong_enums)) | 
 | 250 | #define _LIBCPP_HAS_NO_STRONG_ENUMS | 
 | 251 | #endif | 
 | 252 |  | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 253 | #if !(__has_feature(cxx_decltype)) | 
 | 254 | #define _LIBCPP_HAS_NO_DECLTYPE | 
 | 255 | #endif | 
 | 256 |  | 
| Howard Hinnant | 4b7a43d | 2011-05-26 17:07:32 | [diff] [blame] | 257 | #if __has_feature(cxx_attributes) | 
| Richard Smith | 0405cc4 | 2012-07-26 02:04:22 | [diff] [blame] | 258 | # define _LIBCPP_NORETURN [[noreturn]] | 
| Howard Hinnant | 4b7a43d | 2011-05-26 17:07:32 | [diff] [blame] | 259 | #else | 
| Richard Smith | 0405cc4 | 2012-07-26 02:04:22 | [diff] [blame] | 260 | # define _LIBCPP_NORETURN __attribute__ ((noreturn)) | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 261 | #endif | 
 | 262 |  | 
| Eric Fiselier | 9bef1ff | 2015-12-23 08:20:26 | [diff] [blame] | 263 | #if !(__has_feature(cxx_default_function_template_args)) | 
 | 264 | #define _LIBCPP_HAS_NO_DEFAULT_FUNCTION_TEMPLATE_ARGS | 
 | 265 | #endif | 
 | 266 |  | 
| Howard Hinnant | 74f4da7 | 2013-05-02 20:18:43 | [diff] [blame] | 267 | #if !(__has_feature(cxx_defaulted_functions)) | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 268 | #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS | 
| Howard Hinnant | 74f4da7 | 2013-05-02 20:18:43 | [diff] [blame] | 269 | #endif // !(__has_feature(cxx_defaulted_functions)) | 
| Howard Hinnant | ed760f4 | 2010-09-29 18:13:54 | [diff] [blame] | 270 |  | 
 | 271 | #if !(__has_feature(cxx_deleted_functions)) | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 272 | #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS | 
 | 273 | #endif // !(__has_feature(cxx_deleted_functions)) | 
 | 274 |  | 
 | 275 | #if !(__has_feature(cxx_lambdas)) | 
 | 276 | #define _LIBCPP_HAS_NO_LAMBDAS | 
 | 277 | #endif | 
 | 278 |  | 
 | 279 | #if !(__has_feature(cxx_nullptr)) | 
 | 280 | #define _LIBCPP_HAS_NO_NULLPTR | 
 | 281 | #endif | 
 | 282 |  | 
 | 283 | #if !(__has_feature(cxx_rvalue_references)) | 
 | 284 | #define _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
 | 285 | #endif | 
 | 286 |  | 
 | 287 | #if !(__has_feature(cxx_static_assert)) | 
 | 288 | #define _LIBCPP_HAS_NO_STATIC_ASSERT | 
 | 289 | #endif | 
 | 290 |  | 
 | 291 | #if !(__has_feature(cxx_auto_type)) | 
 | 292 | #define _LIBCPP_HAS_NO_AUTO_TYPE | 
| Howard Hinnant | 23369ee | 2011-07-29 21:35:53 | [diff] [blame] | 293 | #endif | 
 | 294 |  | 
| Howard Hinnant | 8775816 | 2011-07-31 17:10:44 | [diff] [blame] | 295 | #if !(__has_feature(cxx_access_control_sfinae)) || !__has_feature(cxx_trailing_return) | 
| Howard Hinnant | 5d37fb3 | 2011-05-11 20:19:40 | [diff] [blame] | 296 | #define _LIBCPP_HAS_NO_ADVANCED_SFINAE | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 297 | #endif | 
 | 298 |  | 
 | 299 | #if !(__has_feature(cxx_variadic_templates)) | 
 | 300 | #define _LIBCPP_HAS_NO_VARIADICS | 
 | 301 | #endif | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 302 |  | 
| Howard Hinnant | 726a76f | 2010-11-16 21:10:23 | [diff] [blame] | 303 | #if !(__has_feature(cxx_trailing_return)) | 
 | 304 | #define _LIBCPP_HAS_NO_TRAILING_RETURN | 
 | 305 | #endif | 
 | 306 |  | 
| Howard Hinnant | e3e3291 | 2011-08-12 21:56:02 | [diff] [blame] | 307 | #if !(__has_feature(cxx_generalized_initializers)) | 
 | 308 | #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS | 
 | 309 | #endif | 
 | 310 |  | 
| Howard Hinnant | 92a0700 | 2011-09-22 19:10:18 | [diff] [blame] | 311 | #if __has_feature(is_base_of) | 
| Howard Hinnant | e9df0a5 | 2013-08-01 18:17:34 | [diff] [blame] | 312 | # define _LIBCPP_HAS_IS_BASE_OF | 
| Howard Hinnant | 92a0700 | 2011-09-22 19:10:18 | [diff] [blame] | 313 | #endif | 
 | 314 |  | 
| Eric Fiselier | 3a0e430 | 2015-06-13 07:08:02 | [diff] [blame] | 315 | #if __has_feature(is_final) | 
 | 316 | # define _LIBCPP_HAS_IS_FINAL | 
 | 317 | #endif | 
 | 318 |  | 
| Douglas Gregor | 35d2fcf | 2011-06-22 22:17:44 | [diff] [blame] | 319 | // Objective-C++ features (opt-in) | 
 | 320 | #if __has_feature(objc_arc) | 
 | 321 | #define _LIBCPP_HAS_OBJC_ARC | 
 | 322 | #endif | 
 | 323 |  | 
 | 324 | #if __has_feature(objc_arc_weak) | 
 | 325 | #define _LIBCPP_HAS_OBJC_ARC_WEAK | 
| Howard Hinnant | f6d875f | 2011-12-02 19:36:40 | [diff] [blame] | 326 | #define _LIBCPP_HAS_NO_STRONG_ENUMS | 
| Douglas Gregor | 35d2fcf | 2011-06-22 22:17:44 | [diff] [blame] | 327 | #endif | 
 | 328 |  | 
| Howard Hinnant | 1387038 | 2010-09-06 19:10:31 | [diff] [blame] | 329 | #if !(__has_feature(cxx_constexpr)) | 
 | 330 | #define _LIBCPP_HAS_NO_CONSTEXPR | 
 | 331 | #endif | 
 | 332 |  | 
| Eric Fiselier | 8fcc272 | 2014-07-17 05:16:18 | [diff] [blame] | 333 | #if !(__has_feature(cxx_relaxed_constexpr)) | 
 | 334 | #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR | 
 | 335 | #endif | 
 | 336 |  | 
| Marshall Clow | 4d23cc6 | 2015-03-17 15:30:22 | [diff] [blame] | 337 | #if !(__has_feature(cxx_variable_templates)) | 
 | 338 | #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES | 
 | 339 | #endif | 
 | 340 |  | 
| David Blaikie | e27e907 | 2013-05-13 21:53:44 | [diff] [blame] | 341 | #if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L | 
 | 342 | #if defined(__FreeBSD__) | 
| David Chisnall | f2533a8 | 2012-03-14 14:10:37 | [diff] [blame] | 343 | #define _LIBCPP_HAS_QUICK_EXIT | 
| Howard Hinnant | 999fc97 | 2012-10-13 18:03:53 | [diff] [blame] | 344 | #define _LIBCPP_HAS_C11_FEATURES | 
| David Blaikie | e27e907 | 2013-05-13 21:53:44 | [diff] [blame] | 345 | #elif defined(__linux__) | 
| Vasileios Kalintiris | 579b42b | 2015-11-09 10:21:04 | [diff] [blame] | 346 | #if !defined(_LIBCPP_HAS_MUSL_LIBC) | 
| Dan Albert | 7d7f3cc | 2016-09-19 18:00:45 | [diff] [blame] | 347 | #if __GLIBC_PREREQ(2, 15) || defined(__BIONIC__) | 
| David Blaikie | e27e907 | 2013-05-13 21:53:44 | [diff] [blame] | 348 | #define _LIBCPP_HAS_QUICK_EXIT | 
 | 349 | #endif | 
 | 350 | #if __GLIBC_PREREQ(2, 17) | 
 | 351 | #define _LIBCPP_HAS_C11_FEATURES | 
 | 352 | #endif | 
| Vasileios Kalintiris | 579b42b | 2015-11-09 10:21:04 | [diff] [blame] | 353 | #else // defined(_LIBCPP_HAS_MUSL_LIBC) | 
 | 354 | #define _LIBCPP_HAS_QUICK_EXIT | 
 | 355 | #define _LIBCPP_HAS_C11_FEATURES | 
| David Blaikie | e27e907 | 2013-05-13 21:53:44 | [diff] [blame] | 356 | #endif | 
| Vasileios Kalintiris | 579b42b | 2015-11-09 10:21:04 | [diff] [blame] | 357 | #endif // __linux__ | 
| David Chisnall | f2533a8 | 2012-03-14 14:10:37 | [diff] [blame] | 358 | #endif | 
 | 359 |  | 
| Eric Fiselier | a3d6b12 | 2015-12-15 22:16:47 | [diff] [blame] | 360 | #if !(__has_feature(cxx_noexcept)) | 
 | 361 | #define _LIBCPP_HAS_NO_NOEXCEPT | 
| Howard Hinnant | 5d37fb3 | 2011-05-11 20:19:40 | [diff] [blame] | 362 | #endif | 
 | 363 |  | 
| Sean Hunt | 737a351 | 2011-07-18 18:37:21 | [diff] [blame] | 364 | #if __has_feature(underlying_type) | 
| Marshall Clow | 81aa3a7 | 2014-06-26 01:07:56 | [diff] [blame] | 365 | # define _LIBCPP_UNDERLYING_TYPE(T) __underlying_type(T) | 
 | 366 | #endif | 
 | 367 |  | 
 | 368 | #if __has_feature(is_literal) | 
 | 369 | # define _LIBCPP_IS_LITERAL(T) __is_literal(T) | 
| Sean Hunt | 737a351 | 2011-07-18 18:37:21 | [diff] [blame] | 370 | #endif | 
 | 371 |  | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 372 | // Inline namespaces are available in Clang regardless of C++ dialect. | 
 | 373 | #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE { | 
 | 374 | #define _LIBCPP_END_NAMESPACE_STD } } | 
 | 375 | #define _VSTD std::_LIBCPP_NAMESPACE | 
 | 376 |  | 
 | 377 | namespace std { | 
 | 378 |  inline namespace _LIBCPP_NAMESPACE { | 
 | 379 |  } | 
 | 380 | } | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 381 |  | 
| Marshall Clow | 7d4d519 | 2014-04-14 15:44:57 | [diff] [blame] | 382 | #if !defined(_LIBCPP_HAS_NO_ASAN) && !__has_feature(address_sanitizer) | 
 | 383 | #define _LIBCPP_HAS_NO_ASAN | 
 | 384 | #endif | 
 | 385 |  | 
| Marshall Clow | 040a034 | 2016-01-12 00:38:04 | [diff] [blame] | 386 | // Allow for build-time disabling of unsigned integer sanitization | 
| Jonathan Roelofs | 90a7bf9 | 2016-01-13 23:27:08 | [diff] [blame] | 387 | #if !defined(_LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK) && __has_attribute(no_sanitize) | 
| Saleem Abdulrasool | f3adaaf | 2016-02-09 04:05:37 | [diff] [blame] | 388 | #define _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK __attribute__((__no_sanitize__("unsigned-integer-overflow"))) | 
| Marshall Clow | 040a034 | 2016-01-12 00:38:04 | [diff] [blame] | 389 | #endif  | 
 | 390 |  | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 391 | #elif defined(__GNUC__) | 
 | 392 |  | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 393 | #define _ALIGNAS(x) __attribute__((__aligned__(x))) | 
| Howard Hinnant | ffab058 | 2012-08-19 17:14:47 | [diff] [blame] | 394 | #define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 395 |  | 
| Richard Smith | 0405cc4 | 2012-07-26 02:04:22 | [diff] [blame] | 396 | #define _LIBCPP_NORETURN __attribute__((noreturn)) | 
| Howard Hinnant | c26fd80 | 2011-05-31 13:13:49 | [diff] [blame] | 397 |  | 
| Marshall Clow | 81aa3a7 | 2014-06-26 01:07:56 | [diff] [blame] | 398 | #if _GNUC_VER >= 407 | 
 | 399 | #define _LIBCPP_UNDERLYING_TYPE(T) __underlying_type(T) | 
 | 400 | #define _LIBCPP_IS_LITERAL(T) __is_literal_type(T) | 
| Eric Fiselier | 3a0e430 | 2015-06-13 07:08:02 | [diff] [blame] | 401 | #define _LIBCPP_HAS_IS_FINAL | 
 | 402 | #endif | 
 | 403 |  | 
 | 404 | #if defined(__GNUC__) && _GNUC_VER >= 403 | 
 | 405 | # define _LIBCPP_HAS_IS_BASE_OF | 
| Marshall Clow | 81aa3a7 | 2014-06-26 01:07:56 | [diff] [blame] | 406 | #endif | 
 | 407 |  | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 408 | #if !__EXCEPTIONS | 
 | 409 | #define _LIBCPP_NO_EXCEPTIONS | 
 | 410 | #endif | 
 | 411 |  | 
| Nico Weber | 0211e86 | 2014-06-04 15:46:56 | [diff] [blame] | 412 | // constexpr was added to GCC in 4.6. | 
 | 413 | #if _GNUC_VER < 406 | 
| Howard Hinnant | 1387038 | 2010-09-06 19:10:31 | [diff] [blame] | 414 | #define _LIBCPP_HAS_NO_CONSTEXPR | 
| Nico Weber | 0211e86 | 2014-06-04 15:46:56 | [diff] [blame] | 415 | // Can only use constexpr in c++11 mode. | 
 | 416 | #elif !defined(__GXX_EXPERIMENTAL_CXX0X__) && __cplusplus < 201103L | 
 | 417 | #define _LIBCPP_HAS_NO_CONSTEXPR | 
 | 418 | #endif | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 419 |  | 
| Marshall Clow | ac042ab | 2015-10-20 07:37:11 | [diff] [blame] | 420 | // Determine if GCC supports relaxed constexpr | 
 | 421 | #if !defined(__cpp_constexpr) || __cpp_constexpr < 201304L | 
| Eric Fiselier | 8fcc272 | 2014-07-17 05:16:18 | [diff] [blame] | 422 | #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR | 
| Marshall Clow | ac042ab | 2015-10-20 07:37:11 | [diff] [blame] | 423 | #endif | 
 | 424 |  | 
| Marshall Clow | 4d23cc6 | 2015-03-17 15:30:22 | [diff] [blame] | 425 | // GCC 5 will support variable templates | 
| Eric Fiselier | e39f4b9 | 2015-12-15 00:32:21 | [diff] [blame] | 426 | #if !defined(__cpp_variable_templates) || __cpp_variable_templates < 201304L | 
| Marshall Clow | 4d23cc6 | 2015-03-17 15:30:22 | [diff] [blame] | 427 | #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES | 
| Eric Fiselier | e39f4b9 | 2015-12-15 00:32:21 | [diff] [blame] | 428 | #endif | 
| Eric Fiselier | 8fcc272 | 2014-07-17 05:16:18 | [diff] [blame] | 429 |  | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 430 | #ifndef __GXX_EXPERIMENTAL_CXX0X__ | 
 | 431 |  | 
 | 432 | #define _LIBCPP_HAS_NO_ADVANCED_SFINAE | 
 | 433 | #define _LIBCPP_HAS_NO_DECLTYPE | 
| Eric Fiselier | 9bef1ff | 2015-12-23 08:20:26 | [diff] [blame] | 434 | #define _LIBCPP_HAS_NO_DEFAULT_FUNCTION_TEMPLATE_ARGS | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 435 | #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS | 
 | 436 | #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS | 
 | 437 | #define _LIBCPP_HAS_NO_NULLPTR | 
 | 438 | #define _LIBCPP_HAS_NO_STATIC_ASSERT | 
 | 439 | #define _LIBCPP_HAS_NO_UNICODE_CHARS | 
 | 440 | #define _LIBCPP_HAS_NO_VARIADICS | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 441 | #define _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Logan Chien | bfd68bf | 2013-12-14 06:44:09 | [diff] [blame] | 442 | #define _LIBCPP_HAS_NO_STRONG_ENUMS | 
| Eric Fiselier | 2960ae2 | 2016-02-11 11:59:44 | [diff] [blame] | 443 | #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES | 
| Eric Fiselier | a3d6b12 | 2015-12-15 22:16:47 | [diff] [blame] | 444 | #define _LIBCPP_HAS_NO_NOEXCEPT | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 445 |  | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 446 | #else // __GXX_EXPERIMENTAL_CXX0X__ | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 447 |  | 
| Howard Hinnant | 75536ba | 2012-10-03 20:48:05 | [diff] [blame] | 448 | #if _GNUC_VER < 403 | 
| Eric Fiselier | 9bef1ff | 2015-12-23 08:20:26 | [diff] [blame] | 449 | #define _LIBCPP_HAS_NO_DEFAULT_FUNCTION_TEMPLATE_ARGS | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 450 | #define _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 451 | #define _LIBCPP_HAS_NO_STATIC_ASSERT | 
 | 452 | #endif | 
 | 453 |  | 
| Eric Fiselier | 9bef1ff | 2015-12-23 08:20:26 | [diff] [blame] | 454 |  | 
| Howard Hinnant | 75536ba | 2012-10-03 20:48:05 | [diff] [blame] | 455 | #if _GNUC_VER < 404 | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 456 | #define _LIBCPP_HAS_NO_DECLTYPE | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 457 | #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS | 
| Eric Fiselier | e39f4b9 | 2015-12-15 00:32:21 | [diff] [blame] | 458 | #define _LIBCPP_HAS_NO_TRAILING_RETURN | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 459 | #define _LIBCPP_HAS_NO_UNICODE_CHARS | 
 | 460 | #define _LIBCPP_HAS_NO_VARIADICS | 
| Howard Hinnant | e3e3291 | 2011-08-12 21:56:02 | [diff] [blame] | 461 | #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS | 
| Howard Hinnant | 75536ba | 2012-10-03 20:48:05 | [diff] [blame] | 462 | #endif // _GNUC_VER < 404 | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 463 |  | 
| Howard Hinnant | 75536ba | 2012-10-03 20:48:05 | [diff] [blame] | 464 | #if _GNUC_VER < 406 | 
| Eric Fiselier | a3d6b12 | 2015-12-15 22:16:47 | [diff] [blame] | 465 | #define _LIBCPP_HAS_NO_NOEXCEPT | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 466 | #define _LIBCPP_HAS_NO_NULLPTR | 
| Eric Fiselier | 2960ae2 | 2016-02-11 11:59:44 | [diff] [blame] | 467 | #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 468 | #endif | 
 | 469 |  | 
| Yaron Keren | 37d0212 | 2013-11-22 09:22:12 | [diff] [blame] | 470 | #if _GNUC_VER < 407 | 
 | 471 | #define _LIBCPP_HAS_NO_ADVANCED_SFINAE | 
 | 472 | #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS | 
 | 473 | #endif | 
 | 474 |  | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 475 | #endif // __GXX_EXPERIMENTAL_CXX0X__ | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 476 |  | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 477 | #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE { | 
 | 478 | #define _LIBCPP_END_NAMESPACE_STD } } | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 | [diff] [blame] | 479 | #define _VSTD std::_LIBCPP_NAMESPACE | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 480 |  | 
 | 481 | namespace std { | 
 | 482 | namespace _LIBCPP_NAMESPACE { | 
 | 483 | } | 
 | 484 | using namespace _LIBCPP_NAMESPACE __attribute__((__strong__)); | 
 | 485 | } | 
 | 486 |  | 
| Marshall Clow | 7d4d519 | 2014-04-14 15:44:57 | [diff] [blame] | 487 | #if !defined(_LIBCPP_HAS_NO_ASAN) && !defined(__SANITIZE_ADDRESS__) | 
 | 488 | #define _LIBCPP_HAS_NO_ASAN | 
 | 489 | #endif | 
 | 490 |  | 
| Howard Hinnant | e9df0a5 | 2013-08-01 18:17:34 | [diff] [blame] | 491 | #elif defined(_LIBCPP_MSVC) | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 492 |  | 
| Howard Hinnant | 78b6828 | 2011-10-22 20:59:45 | [diff] [blame] | 493 | #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 494 | #define _LIBCPP_HAS_NO_CONSTEXPR | 
| Eric Fiselier | 8fcc272 | 2014-07-17 05:16:18 | [diff] [blame] | 495 | #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR | 
| Marshall Clow | 4d23cc6 | 2015-03-17 15:30:22 | [diff] [blame] | 496 | #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 497 | #define _LIBCPP_HAS_NO_UNICODE_CHARS | 
 | 498 | #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS | 
| Howard Hinnant | fc3f80b | 2013-08-24 21:31:37 | [diff] [blame] | 499 | #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS | 
| Eric Fiselier | a3d6b12 | 2015-12-15 22:16:47 | [diff] [blame] | 500 | #define _LIBCPP_HAS_NO_NOEXCEPT | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 501 | #define __alignof__ __alignof | 
| Richard Smith | 0405cc4 | 2012-07-26 02:04:22 | [diff] [blame] | 502 | #define _LIBCPP_NORETURN __declspec(noreturn) | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 503 | #define _ALIGNAS(x) __declspec(align(x)) | 
 | 504 | #define _LIBCPP_HAS_NO_VARIADICS | 
 | 505 |  | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 506 | #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { | 
 | 507 | #define _LIBCPP_END_NAMESPACE_STD } | 
 | 508 | #define _VSTD std | 
 | 509 |  | 
| Howard Hinnant | 5a8b578 | 2013-10-04 23:56:37 | [diff] [blame] | 510 | # define _LIBCPP_WEAK | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 511 | namespace std { | 
 | 512 | } | 
 | 513 |  | 
| Marshall Clow | 7d4d519 | 2014-04-14 15:44:57 | [diff] [blame] | 514 | #define _LIBCPP_HAS_NO_ASAN | 
 | 515 |  | 
| Howard Hinnant | 7f76450 | 2013-08-14 18:00:20 | [diff] [blame] | 516 | #elif defined(__IBMCPP__) | 
 | 517 |  | 
 | 518 | #define _ALIGNAS(x) __attribute__((__aligned__(x))) | 
 | 519 | #define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) | 
 | 520 | #define _ATTRIBUTE(x) __attribute__((x)) | 
 | 521 | #define _LIBCPP_NORETURN __attribute__((noreturn)) | 
 | 522 |  | 
| Eric Fiselier | 9bef1ff | 2015-12-23 08:20:26 | [diff] [blame] | 523 | #define _LIBCPP_HAS_NO_DEFAULT_FUNCTION_TEMPLATE_ARGS | 
| Howard Hinnant | 7f76450 | 2013-08-14 18:00:20 | [diff] [blame] | 524 | #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES | 
 | 525 | #define _LIBCPP_HAS_NO_ADVANCED_SFINAE | 
| Howard Hinnant | 7f76450 | 2013-08-14 18:00:20 | [diff] [blame] | 526 | #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS | 
| Eric Fiselier | a3d6b12 | 2015-12-15 22:16:47 | [diff] [blame] | 527 | #define _LIBCPP_HAS_NO_NOEXCEPT | 
| Howard Hinnant | 7f76450 | 2013-08-14 18:00:20 | [diff] [blame] | 528 | #define _LIBCPP_HAS_NO_NULLPTR | 
 | 529 | #define _LIBCPP_HAS_NO_UNICODE_CHARS | 
| Howard Hinnant | 7f76450 | 2013-08-14 18:00:20 | [diff] [blame] | 530 | #define _LIBCPP_HAS_IS_BASE_OF | 
| Eric Fiselier | 3a0e430 | 2015-06-13 07:08:02 | [diff] [blame] | 531 | #define _LIBCPP_HAS_IS_FINAL | 
| Marshall Clow | 4d23cc6 | 2015-03-17 15:30:22 | [diff] [blame] | 532 | #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES | 
| Howard Hinnant | 7f76450 | 2013-08-14 18:00:20 | [diff] [blame] | 533 |  | 
 | 534 | #if defined(_AIX) | 
 | 535 | #define __MULTILOCALE_API | 
 | 536 | #endif | 
 | 537 |  | 
 | 538 | #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE { | 
 | 539 | #define _LIBCPP_END_NAMESPACE_STD } } | 
 | 540 | #define _VSTD std::_LIBCPP_NAMESPACE | 
 | 541 |  | 
 | 542 | namespace std { | 
 | 543 |  inline namespace _LIBCPP_NAMESPACE { | 
 | 544 |  } | 
 | 545 | } | 
 | 546 |  | 
| Marshall Clow | 7d4d519 | 2014-04-14 15:44:57 | [diff] [blame] | 547 | #define _LIBCPP_HAS_NO_ASAN | 
 | 548 |  | 
| Marshall Clow | af6cd29 | 2014-01-06 15:23:02 | [diff] [blame] | 549 | #endif // __clang__ || __GNUC__ || _MSC_VER || __IBMCPP__ | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 550 |  | 
| Eric Fiselier | 833d644 | 2016-09-15 22:27:07 | [diff] [blame] | 551 |  | 
 | 552 | #ifdef _WIN32 | 
 | 553 | // only really useful for a DLL. _LIBCPP_DLL should be a compiler builtin define ideally... | 
 | 554 | #if defined(_LIBCPP_DLL) && defined(cxx_EXPORTS) | 
 | 555 | # define _LIBCPP_DLL_VIS __declspec(dllexport) | 
| Shoaib Meenai | e5cbce4 | 2016-09-19 18:29:07 | [diff] [blame] | 556 | # define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS | 
 | 557 | # define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS _LIBCPP_DLL_VIS | 
| Eric Fiselier | 833d644 | 2016-09-15 22:27:07 | [diff] [blame] | 558 | #elif defined(_LIBCPP_DLL) | 
 | 559 | # define _LIBCPP_DLL_VIS __declspec(dllimport) | 
| Shoaib Meenai | e5cbce4 | 2016-09-19 18:29:07 | [diff] [blame] | 560 | # define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS _LIBCPP_DLL_VIS | 
 | 561 | # define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS | 
| Eric Fiselier | 833d644 | 2016-09-15 22:27:07 | [diff] [blame] | 562 | #else | 
 | 563 | # define _LIBCPP_DLL_VIS | 
| Shoaib Meenai | e5cbce4 | 2016-09-19 18:29:07 | [diff] [blame] | 564 | # define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS | 
 | 565 | # define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS | 
| Eric Fiselier | 833d644 | 2016-09-15 22:27:07 | [diff] [blame] | 566 | #endif | 
 | 567 | #define _LIBCPP_TYPE_VIS _LIBCPP_DLL_VIS | 
 | 568 | #define _LIBCPP_FUNC_VIS _LIBCPP_DLL_VIS | 
 | 569 | #define _LIBCPP_EXCEPTION_ABI _LIBCPP_DLL_VIS | 
| Eric Fiselier | 833d644 | 2016-09-15 22:27:07 | [diff] [blame] | 570 | #define _LIBCPP_HIDDEN | 
 | 571 | #define _LIBCPP_TYPE_VIS_ONLY | 
 | 572 | #define _LIBCPP_FUNC_VIS_ONLY | 
 | 573 | #define _LIBCPP_ENUM_VIS | 
| Shoaib Meenai | e81a54c | 2016-09-16 19:12:54 | [diff] [blame] | 574 | #if defined(_LIBCPP_MSVC) | 
 | 575 | # define _LIBCPP_INLINE_VISIBILITY __forceinline | 
 | 576 | # define _LIBCPP_ALWAYS_INLINE __forceinline | 
 | 577 | # define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __forceinline | 
 | 578 | #else | 
 | 579 | # define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__)) | 
 | 580 | # define _LIBCPP_ALWAYS_INLINE __attribute__ ((__always_inline__)) | 
 | 581 | # define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __attribute__ ((__always_inline__)) | 
 | 582 | #endif | 
| Eric Fiselier | 833d644 | 2016-09-15 22:27:07 | [diff] [blame] | 583 | #endif // _WIN32 | 
 | 584 |  | 
 | 585 | #ifndef _LIBCPP_HIDDEN | 
 | 586 | #define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden"))) | 
 | 587 | #endif | 
 | 588 |  | 
 | 589 | #ifndef _LIBCPP_FUNC_VIS | 
 | 590 | #define _LIBCPP_FUNC_VIS __attribute__ ((__visibility__("default"))) | 
 | 591 | #endif | 
 | 592 |  | 
 | 593 | #ifndef _LIBCPP_TYPE_VIS | 
 | 594 | # if __has_attribute(__type_visibility__) | 
 | 595 | # define _LIBCPP_TYPE_VIS __attribute__ ((__type_visibility__("default"))) | 
 | 596 | # else | 
 | 597 | # define _LIBCPP_TYPE_VIS __attribute__ ((__visibility__("default"))) | 
 | 598 | # endif | 
 | 599 | #endif | 
 | 600 |  | 
 | 601 | #ifndef _LIBCPP_TYPE_VIS_ONLY | 
 | 602 | # define _LIBCPP_TYPE_VIS_ONLY _LIBCPP_TYPE_VIS | 
 | 603 | #endif | 
 | 604 |  | 
 | 605 | #ifndef _LIBCPP_FUNC_VIS_ONLY | 
 | 606 | # define _LIBCPP_FUNC_VIS_ONLY _LIBCPP_FUNC_VIS | 
 | 607 | #endif | 
 | 608 |  | 
 | 609 | #ifndef _LIBCPP_EXCEPTION_ABI | 
 | 610 | #define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default"))) | 
 | 611 | #endif | 
 | 612 |  | 
 | 613 | #ifndef _LIBCPP_ENUM_VIS | 
 | 614 | # if __has_attribute(__type_visibility__) | 
 | 615 | # define _LIBCPP_ENUM_VIS __attribute__ ((__type_visibility__("default"))) | 
 | 616 | # else | 
 | 617 | # define _LIBCPP_ENUM_VIS | 
 | 618 | # endif | 
 | 619 | #endif | 
 | 620 |  | 
 | 621 | #ifndef _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS | 
 | 622 | # if __has_attribute(__type_visibility__) | 
 | 623 | # define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __attribute__ ((__visibility__("default"))) | 
 | 624 | # else | 
 | 625 | # define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS | 
 | 626 | # endif | 
 | 627 | #endif | 
 | 628 |  | 
| Shoaib Meenai | e5cbce4 | 2016-09-19 18:29:07 | [diff] [blame] | 629 | #ifndef _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS | 
 | 630 | # define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS | 
 | 631 | #endif | 
 | 632 |  | 
| Eric Fiselier | 833d644 | 2016-09-15 22:27:07 | [diff] [blame] | 633 | #ifndef _LIBCPP_INLINE_VISIBILITY | 
| Eric Fiselier | 1deaf19 | 2016-09-25 03:14:13 | [diff] [blame^] | 634 | # if __has_attribute(__internal_linkage__) | 
 | 635 | # define _LIBCPP_INLINE_VISIBILITY __attribute__((__internal_linkage__, __always_inline__)) | 
 | 636 | # else | 
 | 637 | # define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__)) | 
 | 638 | # endif | 
| Eric Fiselier | 833d644 | 2016-09-15 22:27:07 | [diff] [blame] | 639 | #endif | 
 | 640 |  | 
 | 641 | #ifndef _LIBCPP_ALWAYS_INLINE | 
| Eric Fiselier | 1deaf19 | 2016-09-25 03:14:13 | [diff] [blame^] | 642 | # if __has_attribute(__internal_linkage__) | 
 | 643 | # define _LIBCPP_ALWAYS_INLINE __attribute__((__internal_linkage__, __always_inline__)) | 
 | 644 | # else | 
 | 645 | # define _LIBCPP_ALWAYS_INLINE __attribute__ ((__visibility__("hidden"), __always_inline__)) | 
 | 646 | # endif | 
| Eric Fiselier | 833d644 | 2016-09-15 22:27:07 | [diff] [blame] | 647 | #endif | 
 | 648 |  | 
| Eric Fiselier | 6dbed46 | 2016-09-16 00:00:48 | [diff] [blame] | 649 | #ifndef _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY | 
 | 650 | # ifdef _LIBCPP_BUILDING_LIBRARY | 
 | 651 | # define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __attribute__((__visibility__("default"), __always_inline__)) | 
 | 652 | # else | 
 | 653 | # define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY | 
 | 654 | # endif | 
 | 655 | #endif | 
 | 656 |  | 
| Eric Fiselier | 833d644 | 2016-09-15 22:27:07 | [diff] [blame] | 657 | #ifndef _LIBCPP_PREFERRED_OVERLOAD | 
 | 658 | # if __has_attribute(__enable_if__) | 
 | 659 | # define _LIBCPP_PREFERRED_OVERLOAD __attribute__ ((__enable_if__(true, ""))) | 
 | 660 | # endif | 
 | 661 | #endif | 
 | 662 |  | 
| Eric Fiselier | a3d6b12 | 2015-12-15 22:16:47 | [diff] [blame] | 663 | #ifndef _LIBCPP_HAS_NO_NOEXCEPT | 
 | 664 | # define _NOEXCEPT noexcept | 
 | 665 | # define _NOEXCEPT_(x) noexcept(x) | 
 | 666 | #else | 
 | 667 | # define _NOEXCEPT throw() | 
 | 668 | # define _NOEXCEPT_(x) | 
 | 669 | #endif | 
 | 670 |  | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 671 | #ifdef _LIBCPP_HAS_NO_UNICODE_CHARS | 
| Howard Hinnant | 60a0a8e | 2010-08-10 20:48:29 | [diff] [blame] | 672 | typedef unsigned short char16_t; | 
 | 673 | typedef unsigned int char32_t; | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 674 | #endif // _LIBCPP_HAS_NO_UNICODE_CHARS | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 675 |  | 
| Stephan Tolksdorf | 8a71d23 | 2014-03-26 19:45:52 | [diff] [blame] | 676 | #ifndef __SIZEOF_INT128__ | 
 | 677 | #define _LIBCPP_HAS_NO_INT128 | 
 | 678 | #endif | 
 | 679 |  | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 680 | #ifdef _LIBCPP_HAS_NO_STATIC_ASSERT | 
 | 681 |  | 
| Richard Smith | b3b0081 | 2015-10-13 23:12:22 | [diff] [blame] | 682 | extern "C++" { | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 683 | template <bool> struct __static_assert_test; | 
 | 684 | template <> struct __static_assert_test<true> {}; | 
 | 685 | template <unsigned> struct __static_assert_check {}; | 
| Richard Smith | b3b0081 | 2015-10-13 23:12:22 | [diff] [blame] | 686 | } | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 687 | #define static_assert(__b, __m) \ | 
 | 688 |  typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \ | 
 | 689 |  _LIBCPP_CONCAT(__t, __LINE__) | 
 | 690 |  | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 691 | #endif // _LIBCPP_HAS_NO_STATIC_ASSERT | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 692 |  | 
 | 693 | #ifdef _LIBCPP_HAS_NO_DECLTYPE | 
| Eric Fiselier | 8f7fe5c | 2015-07-10 20:26:38 | [diff] [blame] | 694 | // GCC 4.6 provides __decltype in all standard modes. | 
 | 695 | #if !__is_identifier(__decltype) || _GNUC_VER >= 406 | 
| Eric Fiselier | 6d7a2cb | 2015-06-13 06:27:17 | [diff] [blame] | 696 | # define decltype(__x) __decltype(__x) | 
 | 697 | #else | 
 | 698 | # define decltype(__x) __typeof__(__x) | 
 | 699 | #endif | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 700 | #endif | 
 | 701 |  | 
| Howard Hinnant | 1387038 | 2010-09-06 19:10:31 | [diff] [blame] | 702 | #ifdef _LIBCPP_HAS_NO_CONSTEXPR | 
| Howard Hinnant | 27b4fd3 | 2012-04-02 00:40:41 | [diff] [blame] | 703 | #define _LIBCPP_CONSTEXPR | 
 | 704 | #else | 
 | 705 | #define _LIBCPP_CONSTEXPR constexpr | 
| Howard Hinnant | 1387038 | 2010-09-06 19:10:31 | [diff] [blame] | 706 | #endif | 
 | 707 |  | 
| Howard Hinnant | 74f4da7 | 2013-05-02 20:18:43 | [diff] [blame] | 708 | #ifdef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS | 
 | 709 | #define _LIBCPP_DEFAULT {} | 
 | 710 | #else | 
 | 711 | #define _LIBCPP_DEFAULT = default; | 
 | 712 | #endif | 
 | 713 |  | 
| Eric Fiselier | db21506 | 2016-03-31 02:15:15 | [diff] [blame] | 714 | #ifdef _LIBCPP_HAS_NO_DELETED_FUNCTIONS | 
 | 715 | #define _LIBCPP_EQUAL_DELETE | 
 | 716 | #else | 
 | 717 | #define _LIBCPP_EQUAL_DELETE = delete | 
 | 718 | #endif | 
 | 719 |  | 
| Nuno Lopes | 518d150 | 2012-06-28 16:47:34 | [diff] [blame] | 720 | #ifdef __GNUC__ | 
| Joerg Sonnenberger | 155f060 | 2013-04-29 19:52:08 | [diff] [blame] | 721 | #define _NOALIAS __attribute__((__malloc__)) | 
| Nuno Lopes | 518d150 | 2012-06-28 16:47:34 | [diff] [blame] | 722 | #else | 
 | 723 | #define _NOALIAS | 
 | 724 | #endif | 
 | 725 |  | 
| Eric Fiselier | 3ec6b84 | 2016-08-29 20:43:38 | [diff] [blame] | 726 | #ifdef __GNUC__ | 
 | 727 | #define _LIBCPP_MAY_ALIAS __attribute__((__may_alias__)) | 
 | 728 | #else | 
 | 729 | #define _LIBCPP_MAY_ALIAS | 
 | 730 | #endif | 
 | 731 |  | 
| Marshall Clow | 016d4e8 | 2013-11-19 19:16:03 | [diff] [blame] | 732 | #if __has_feature(cxx_explicit_conversions) || defined(__IBMCPP__) | 
| Howard Hinnant | 7786188 | 2012-02-21 21:46:43 | [diff] [blame] | 733 | # define _LIBCPP_EXPLICIT explicit | 
 | 734 | #else | 
 | 735 | # define _LIBCPP_EXPLICIT | 
 | 736 | #endif | 
 | 737 |  | 
| Richard Smith | 73c1fce | 2014-06-04 19:54:15 | [diff] [blame] | 738 | #if !__has_builtin(__builtin_operator_new) || !__has_builtin(__builtin_operator_delete) | 
 | 739 | # define _LIBCPP_HAS_NO_BUILTIN_OPERATOR_NEW_DELETE | 
 | 740 | #endif | 
 | 741 |  | 
| Howard Hinnant | f6d875f | 2011-12-02 19:36:40 | [diff] [blame] | 742 | #ifdef _LIBCPP_HAS_NO_STRONG_ENUMS | 
| Howard Hinnant | 83eade6 | 2013-03-06 23:30:19 | [diff] [blame] | 743 | #define _LIBCPP_DECLARE_STRONG_ENUM(x) struct _LIBCPP_TYPE_VIS x { enum __lx | 
| Howard Hinnant | f6d875f | 2011-12-02 19:36:40 | [diff] [blame] | 744 | #define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \ | 
| Howard Hinnant | 9c0df14 | 2012-10-30 19:06:59 | [diff] [blame] | 745 |  __lx __v_; \ | 
 | 746 |  _LIBCPP_ALWAYS_INLINE x(__lx __v) : __v_(__v) {} \ | 
 | 747 |  _LIBCPP_ALWAYS_INLINE explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \ | 
| Howard Hinnant | f6d875f | 2011-12-02 19:36:40 | [diff] [blame] | 748 |  _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \ | 
 | 749 |  }; | 
 | 750 | #else // _LIBCPP_HAS_NO_STRONG_ENUMS | 
| Eric Fiselier | 833d644 | 2016-09-15 22:27:07 | [diff] [blame] | 751 | #define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_ENUM_VIS x | 
| Howard Hinnant | f6d875f | 2011-12-02 19:36:40 | [diff] [blame] | 752 | #define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) | 
 | 753 | #endif // _LIBCPP_HAS_NO_STRONG_ENUMS | 
 | 754 |  | 
| Howard Hinnant | 5e57142 | 2013-08-23 20:10:18 | [diff] [blame] | 755 | #ifdef _LIBCPP_DEBUG | 
 | 756 | # if _LIBCPP_DEBUG == 0 | 
| Howard Hinnant | 499cea1 | 2013-08-23 17:37:05 | [diff] [blame] | 757 | # define _LIBCPP_DEBUG_LEVEL 1 | 
| Howard Hinnant | 5e57142 | 2013-08-23 20:10:18 | [diff] [blame] | 758 | # elif _LIBCPP_DEBUG == 1 | 
| Howard Hinnant | 499cea1 | 2013-08-23 17:37:05 | [diff] [blame] | 759 | # define _LIBCPP_DEBUG_LEVEL 2 | 
 | 760 | # else | 
| Howard Hinnant | 5e57142 | 2013-08-23 20:10:18 | [diff] [blame] | 761 | # error Supported values for _LIBCPP_DEBUG are 0 and 1 | 
| Howard Hinnant | 499cea1 | 2013-08-23 17:37:05 | [diff] [blame] | 762 | # endif | 
 | 763 | # define _LIBCPP_EXTERN_TEMPLATE(...) | 
 | 764 | #endif | 
 | 765 |  | 
| Howard Hinnant | ff92677 | 2012-11-06 21:08:48 | [diff] [blame] | 766 | #ifndef _LIBCPP_EXTERN_TEMPLATE | 
| Justin Bogner | 98c4e40 | 2014-08-15 17:58:56 | [diff] [blame] | 767 | #define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__; | 
| Howard Hinnant | ff92677 | 2012-11-06 21:08:48 | [diff] [blame] | 768 | #endif | 
 | 769 |  | 
| Howard Hinnant | 499cea1 | 2013-08-23 17:37:05 | [diff] [blame] | 770 | #ifndef _LIBCPP_EXTERN_TEMPLATE2 | 
 | 771 | #define _LIBCPP_EXTERN_TEMPLATE2(...) extern template __VA_ARGS__; | 
 | 772 | #endif | 
 | 773 |  | 
| Tim Northover | 81339cf | 2014-03-30 14:59:12 | [diff] [blame] | 774 | #if defined(__APPLE__) && defined(__LP64__) && !defined(__x86_64__) | 
| Tim Northover | 6fdde87 | 2014-03-30 11:34:26 | [diff] [blame] | 775 | #define _LIBCPP_NONUNIQUE_RTTI_BIT (1ULL << 63) | 
 | 776 | #endif | 
 | 777 |  | 
| Ed Schouten | 4c42c4e | 2015-03-10 09:26:38 | [diff] [blame] | 778 | #if defined(__APPLE__) || defined(__FreeBSD__) || defined(_WIN32) || \ | 
 | 779 |  defined(__sun__) || defined(__NetBSD__) || defined(__CloudABI__) | 
| Sean Hunt | f3907e6 | 2011-07-15 05:40:33 | [diff] [blame] | 780 | #define _LIBCPP_LOCALE__L_EXTENSIONS 1 | 
 | 781 | #endif | 
| Yaron Keren | f1ebe26 | 2013-12-20 13:19:45 | [diff] [blame] | 782 |  | 
| Ben Craig | f8865b6 | 2016-02-10 13:47:25 | [diff] [blame] | 783 | #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) | 
 | 784 | // Most unix variants have catopen. These are the specific ones that don't. | 
| Dan Albert | 7d7f3cc | 2016-09-19 18:00:45 | [diff] [blame] | 785 | #if !defined(_WIN32) && !defined(__BIONIC__) && !defined(_NEWLIB_VERSION) | 
| Ed Schouten | 0251f0f | 2015-03-11 16:39:36 | [diff] [blame] | 786 | #define _LIBCPP_HAS_CATOPEN 1 | 
 | 787 | #endif | 
| Ben Craig | f8865b6 | 2016-02-10 13:47:25 | [diff] [blame] | 788 | #endif | 
| Ed Schouten | 0251f0f | 2015-03-11 16:39:36 | [diff] [blame] | 789 |  | 
| Marshall Clow | 53e2763 | 2013-03-18 19:34:07 | [diff] [blame] | 790 | #ifdef __FreeBSD__ | 
| David Chisnall | 91a8272 | 2011-11-13 17:15:33 | [diff] [blame] | 791 | #define _DECLARE_C99_LDBL_MATH 1 | 
 | 792 | #endif | 
| Sean Hunt | f3907e6 | 2011-07-15 05:40:33 | [diff] [blame] | 793 |  | 
| Marshall Clow | 53e2763 | 2013-03-18 19:34:07 | [diff] [blame] | 794 | #if defined(__APPLE__) || defined(__FreeBSD__) | 
| Howard Hinnant | 866569b | 2011-09-28 23:39:33 | [diff] [blame] | 795 | #define _LIBCPP_HAS_DEFAULTRUNELOCALE | 
| Sean Hunt | e59f724 | 2011-07-09 01:09:31 | [diff] [blame] | 796 | #endif | 
 | 797 |  | 
| Marshall Clow | 53e2763 | 2013-03-18 19:34:07 | [diff] [blame] | 798 | #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__) | 
| Sean Hunt | 6f0342c | 2011-07-09 03:40:04 | [diff] [blame] | 799 | #define _LIBCPP_WCTYPE_IS_MASK | 
 | 800 | #endif | 
 | 801 |  | 
| Howard Hinnant | 5f1286f | 2013-05-07 20:16:13 | [diff] [blame] | 802 | #ifndef _LIBCPP_STD_VER | 
 | 803 | # if __cplusplus <= 201103L | 
 | 804 | # define _LIBCPP_STD_VER 11 | 
| Marshall Clow | 20f0955 | 2014-06-06 22:31:09 | [diff] [blame] | 805 | # elif __cplusplus <= 201402L | 
 | 806 | # define _LIBCPP_STD_VER 14 | 
| Howard Hinnant | 5f1286f | 2013-05-07 20:16:13 | [diff] [blame] | 807 | # else | 
| Eric Fiselier | 83d7ca9 | 2016-06-27 01:02:43 | [diff] [blame] | 808 | # define _LIBCPP_STD_VER 16 // current year, or date of c++17 ratification | 
| Howard Hinnant | 5f1286f | 2013-05-07 20:16:13 | [diff] [blame] | 809 | # endif | 
 | 810 | #endif // _LIBCPP_STD_VER | 
 | 811 |  | 
| Marshall Clow | 6db12cb | 2013-09-28 18:35:31 | [diff] [blame] | 812 | #if _LIBCPP_STD_VER > 11 | 
 | 813 | #define _LIBCPP_DEPRECATED [[deprecated]] | 
 | 814 | #else | 
 | 815 | #define _LIBCPP_DEPRECATED | 
 | 816 | #endif | 
 | 817 |  | 
| Marshall Clow | ac93d0e | 2013-07-15 14:57:19 | [diff] [blame] | 818 | #if _LIBCPP_STD_VER <= 11 | 
| Marshall Clow | 83179a7 | 2013-08-27 20:18:59 | [diff] [blame] | 819 | #define _LIBCPP_EXPLICIT_AFTER_CXX11 | 
| Marshall Clow | 6db12cb | 2013-09-28 18:35:31 | [diff] [blame] | 820 | #define _LIBCPP_DEPRECATED_AFTER_CXX11 | 
| Marshall Clow | ac93d0e | 2013-07-15 14:57:19 | [diff] [blame] | 821 | #else | 
| Marshall Clow | 83179a7 | 2013-08-27 20:18:59 | [diff] [blame] | 822 | #define _LIBCPP_EXPLICIT_AFTER_CXX11 explicit | 
| Marshall Clow | 6db12cb | 2013-09-28 18:35:31 | [diff] [blame] | 823 | #define _LIBCPP_DEPRECATED_AFTER_CXX11 [[deprecated]] | 
| Marshall Clow | ac93d0e | 2013-07-15 14:57:19 | [diff] [blame] | 824 | #endif | 
 | 825 |  | 
| Eric Fiselier | 8fcc272 | 2014-07-17 05:16:18 | [diff] [blame] | 826 | #if _LIBCPP_STD_VER > 11 && !defined(_LIBCPP_HAS_NO_CXX14_CONSTEXPR) | 
 | 827 | #define _LIBCPP_CONSTEXPR_AFTER_CXX11 constexpr | 
 | 828 | #else | 
 | 829 | #define _LIBCPP_CONSTEXPR_AFTER_CXX11 | 
 | 830 | #endif | 
 | 831 |  | 
| Eric Fiselier | 735026e | 2016-03-17 03:30:56 | [diff] [blame] | 832 | #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_CXX14_CONSTEXPR) | 
 | 833 | #define _LIBCPP_CONSTEXPR_AFTER_CXX14 constexpr | 
 | 834 | #else | 
 | 835 | #define _LIBCPP_CONSTEXPR_AFTER_CXX14 | 
 | 836 | #endif | 
 | 837 |  | 
| Dimitry Andric | 8966350 | 2015-08-19 06:43:33 | [diff] [blame] | 838 | #ifdef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
 | 839 | # define _LIBCPP_EXPLICIT_MOVE(x) _VSTD::move(x) | 
 | 840 | #else | 
 | 841 | # define _LIBCPP_EXPLICIT_MOVE(x) (x) | 
 | 842 | #endif | 
 | 843 |  | 
| Marshall Clow | 1f50f2d | 2014-05-08 14:14:06 | [diff] [blame] | 844 | #ifndef _LIBCPP_HAS_NO_ASAN | 
 | 845 | extern "C" void __sanitizer_annotate_contiguous_container( | 
 | 846 |  const void *, const void *, const void *, const void *); | 
 | 847 | #endif | 
 | 848 |  | 
| Howard Hinnant | f677bc4 | 2013-10-04 21:24:21 | [diff] [blame] | 849 | // Try to find out if RTTI is disabled. | 
 | 850 | // g++ and cl.exe have RTTI on by default and define a macro when it is. | 
 | 851 | // g++ only defines the macro in 4.3.2 and onwards. | 
 | 852 | #if !defined(_LIBCPP_NO_RTTI) | 
| Marshall Clow | 6a85e8a | 2015-09-22 21:58:30 | [diff] [blame] | 853 | # if defined(__GNUC__) && ((__GNUC__ >= 5) || (__GNUC__ == 4 && \ | 
| Alexey Volkov | 5907f03 | 2014-09-03 14:30:39 | [diff] [blame] | 854 |  (__GNUC_MINOR__ >= 3 || __GNUC_PATCHLEVEL__ >= 2))) && !defined(__GXX_RTTI) | 
| Howard Hinnant | f677bc4 | 2013-10-04 21:24:21 | [diff] [blame] | 855 | # define _LIBCPP_NO_RTTI | 
 | 856 | # elif (defined(_MSC_VER) && !defined(__clang__)) && !defined(_CPPRTTI) | 
 | 857 | # define _LIBCPP_NO_RTTI | 
 | 858 | # endif | 
 | 859 | #endif | 
 | 860 |  | 
| Howard Hinnant | 5a8b578 | 2013-10-04 23:56:37 | [diff] [blame] | 861 | #ifndef _LIBCPP_WEAK | 
 | 862 | # define _LIBCPP_WEAK __attribute__((__weak__)) | 
 | 863 | #endif | 
 | 864 |  | 
| Asiri Rathnayake | 35ff03b | 2016-05-06 14:06:29 | [diff] [blame] | 865 | // Thread API | 
| Asiri Rathnayake | 040945b | 2016-09-11 21:46:40 | [diff] [blame] | 866 | #if !defined(_LIBCPP_HAS_NO_THREADS) && \ | 
 | 867 |  !defined(_LIBCPP_HAS_THREAD_API_PTHREAD) && \ | 
 | 868 |  !defined(_LIBCPP_HAS_THREAD_API_EXTERNAL) | 
| Asiri Rathnayake | 35ff03b | 2016-05-06 14:06:29 | [diff] [blame] | 869 | # if defined(__FreeBSD__) || \ | 
 | 870 |  defined(__NetBSD__) || \ | 
 | 871 |  defined(__linux__) || \ | 
 | 872 |  defined(__APPLE__) || \ | 
| Eric Fiselier | 8c8f0e5 | 2016-05-07 17:05:46 | [diff] [blame] | 873 |  defined(__CloudABI__) || \ | 
 | 874 |  defined(__sun__) | 
| Ben Craig | 5163e46 | 2016-05-25 17:40:09 | [diff] [blame] | 875 | # define _LIBCPP_HAS_THREAD_API_PTHREAD | 
| Asiri Rathnayake | 35ff03b | 2016-05-06 14:06:29 | [diff] [blame] | 876 | # else | 
 | 877 | # error "No thread API" | 
| Ben Craig | 5163e46 | 2016-05-25 17:40:09 | [diff] [blame] | 878 | # endif // _LIBCPP_HAS_THREAD_API | 
| Asiri Rathnayake | 35ff03b | 2016-05-06 14:06:29 | [diff] [blame] | 879 | #endif // _LIBCPP_HAS_NO_THREADS | 
 | 880 |  | 
| Ben Craig | 5163e46 | 2016-05-25 17:40:09 | [diff] [blame] | 881 | #if defined(_LIBCPP_HAS_NO_THREADS) && defined(_LIBCPP_HAS_THREAD_API_PTHREAD) | 
 | 882 | # error _LIBCPP_HAS_THREAD_API_PTHREAD may only be defined when \ | 
 | 883 |  _LIBCPP_HAS_NO_THREADS is not defined. | 
 | 884 | #endif | 
| Asiri Rathnayake | 35ff03b | 2016-05-06 14:06:29 | [diff] [blame] | 885 |  | 
| Asiri Rathnayake | 040945b | 2016-09-11 21:46:40 | [diff] [blame] | 886 | #if defined(_LIBCPP_HAS_NO_THREADS) && defined(_LIBCPP_HAS_THREAD_API_EXTERNAL) | 
 | 887 | # error _LIBCPP_HAS_EXTERNAL_THREAD_API may not be defined when \ | 
 | 888 |  _LIBCPP_HAS_NO_THREADS is defined. | 
 | 889 | #endif | 
 | 890 |  | 
| Eric Fiselier | a245f9b | 2014-12-06 20:09:11 | [diff] [blame] | 891 | #if defined(_LIBCPP_HAS_NO_MONOTONIC_CLOCK) && !defined(_LIBCPP_HAS_NO_THREADS) | 
 | 892 | # error _LIBCPP_HAS_NO_MONOTONIC_CLOCK may only be defined when \ | 
 | 893 |  _LIBCPP_HAS_NO_THREADS is defined. | 
 | 894 | #endif | 
 | 895 |  | 
| Ed Schouten | b33ae5b | 2015-03-12 15:44:39 | [diff] [blame] | 896 | // Systems that use capability-based security (FreeBSD with Capsicum, | 
 | 897 | // Nuxi CloudABI) may only provide local filesystem access (using *at()). | 
 | 898 | // Functions like open(), rename(), unlink() and stat() should not be | 
 | 899 | // used, as they attempt to access the global filesystem namespace. | 
 | 900 | #ifdef __CloudABI__ | 
 | 901 | #define _LIBCPP_HAS_NO_GLOBAL_FILESYSTEM_NAMESPACE | 
 | 902 | #endif | 
 | 903 |  | 
| Ed Schouten | abd06b4 | 2015-03-26 14:35:46 | [diff] [blame] | 904 | // CloudABI is intended for running networked services. Processes do not | 
 | 905 | // have standard input and output channels. | 
 | 906 | #ifdef __CloudABI__ | 
 | 907 | #define _LIBCPP_HAS_NO_STDIN | 
 | 908 | #define _LIBCPP_HAS_NO_STDOUT | 
 | 909 | #endif | 
 | 910 |  | 
| Dan Albert | 7d7f3cc | 2016-09-19 18:00:45 | [diff] [blame] | 911 | #if defined(__BIONIC__) || defined(__CloudABI__) || \ | 
 | 912 |  defined(_LIBCPP_HAS_MUSL_LIBC) | 
| Dan Albert | 6272ae5 | 2015-03-11 00:51:06 | [diff] [blame] | 913 | #define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE | 
 | 914 | #endif | 
 | 915 |  | 
| Ed Schouten | 323ade3 | 2015-06-24 08:44:38 | [diff] [blame] | 916 | // Thread-unsafe functions such as strtok(), mbtowc() and localtime() | 
 | 917 | // are not available. | 
 | 918 | #ifdef __CloudABI__ | 
 | 919 | #define _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS | 
 | 920 | #endif | 
 | 921 |  | 
| Eric Fiselier | 0b4ab6f | 2015-09-22 03:15:35 | [diff] [blame] | 922 | #if __has_feature(cxx_atomic) || __has_extension(c_atomic) | 
| Eric Fiselier | 00f4a49 | 2015-08-19 17:21:46 | [diff] [blame] | 923 | #define _LIBCPP_HAS_C_ATOMIC_IMP | 
 | 924 | #elif _GNUC_VER > 407 | 
 | 925 | #define _LIBCPP_HAS_GCC_ATOMIC_IMP | 
 | 926 | #endif | 
 | 927 |  | 
 | 928 | #if (!defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_GCC_ATOMIC_IMP)) \ | 
 | 929 |  || defined(_LIBCPP_HAS_NO_THREADS) | 
 | 930 | #define _LIBCPP_HAS_NO_ATOMIC_HEADER | 
 | 931 | #endif | 
 | 932 |  | 
| Marshall Clow | 7a3731f | 2016-01-11 19:27:10 | [diff] [blame] | 933 | #ifndef _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK | 
 | 934 | #define _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK | 
| Eric Fiselier | 2960ae2 | 2016-02-11 11:59:44 | [diff] [blame] | 935 | #endif | 
 | 936 |  | 
 | 937 | #if __cplusplus < 201103L | 
 | 938 | #define _LIBCPP_CXX03_LANG | 
 | 939 | #else | 
| Eric Fiselier | d9e1819 | 2016-06-14 14:34:19 | [diff] [blame] | 940 | #if defined(_LIBCPP_HAS_NO_VARIADIC_TEMPLATES) || defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) | 
| Eric Fiselier | 2960ae2 | 2016-02-11 11:59:44 | [diff] [blame] | 941 | #error Libc++ requires a feature complete C++11 compiler in C++11 or greater. | 
 | 942 | #endif | 
 | 943 | #endif | 
| Marshall Clow | 7a3731f | 2016-01-11 19:27:10 | [diff] [blame] | 944 |  | 
| Eric Fiselier | a15e8c3 | 2016-03-16 02:30:06 | [diff] [blame] | 945 | #if (defined(_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS) && defined(__clang__) \ | 
 | 946 |  && __has_attribute(acquire_capability)) | 
 | 947 | #define _LIBCPP_HAS_THREAD_SAFETY_ANNOTATIONS | 
 | 948 | #endif | 
 | 949 |  | 
| Eric Fiselier | 766a31a | 2016-09-03 00:11:33 | [diff] [blame] | 950 | #if __has_attribute(require_constant_initialization) | 
 | 951 | #define _LIBCPP_SAFE_STATIC __attribute__((__require_constant_initialization__)) | 
 | 952 | #else | 
 | 953 | #define _LIBCPP_SAFE_STATIC | 
 | 954 | #endif | 
 | 955 |  | 
| Eric Fiselier | 38e7a30 | 2015-11-06 06:30:12 | [diff] [blame] | 956 | #endif // __cplusplus | 
 | 957 |  | 
| Eric Fiselier | 00f4a49 | 2015-08-19 17:21:46 | [diff] [blame] | 958 | #endif // _LIBCPP_CONFIG |