/prelude/prelude.hpp

http://github.com/Eelis/geordi · C++ Header · 242 lines · 223 code · 16 blank · 3 comment · 0 complexity · a90bb15aef79c49178785d9a5ccbe27d MD5 · raw file

  1. #ifdef __clang__
  2. #include "libcxx_patched_typeinfo.hpp"
  3. #else
  4. #include "libstdcxx_patched_typeinfo.hpp"
  5. #endif
  6. #if __cplusplus >= 201103 // maybe backport parts of these even further someday
  7. #include "lvalue_rvalue.hpp"
  8. #include "bin_iomanip.hpp"
  9. #include "type_strings.hpp"
  10. #endif
  11. #include "tracked.hpp"
  12. #include "more_ostreaming.hpp"
  13. #include "literal_escape.hpp"
  14. #include "delimited_ostream.hpp"
  15. #include "show.hpp"
  16. #include "evil_casts.hpp"
  17. #include "geordi.hpp"
  18. #include "bark.hpp"
  19. #include <algorithm>
  20. #include <bitset>
  21. #include <complex>
  22. #include <deque>
  23. #include <exception>
  24. #include <fstream>
  25. #include <functional>
  26. #include <iomanip>
  27. #include <ios>
  28. #include <iosfwd>
  29. #include <iostream>
  30. #include <istream>
  31. #include <iterator>
  32. #include <limits>
  33. #include <list>
  34. #include <locale>
  35. #include <map>
  36. #include <memory>
  37. #include <new>
  38. #include <numeric>
  39. #include <ostream>
  40. #include <queue>
  41. #include <set>
  42. #include <sstream>
  43. #include <stack>
  44. #include <stdexcept>
  45. #include <strstream>
  46. #include <streambuf>
  47. #include <string>
  48. #include <typeinfo>
  49. #include <utility>
  50. #include <valarray>
  51. #include <vector>
  52. #include <cassert>
  53. #include <cctype>
  54. #include <cerrno>
  55. #include <cfloat>
  56. #include <ciso646>
  57. #include <climits>
  58. #include <clocale>
  59. #include <cmath>
  60. #include <csetjmp>
  61. #include <csignal>
  62. #include <cstdarg>
  63. #include <cstddef>
  64. #include <cstdio>
  65. #include <cstdlib>
  66. #include <cstring>
  67. #include <ctime>
  68. #include <cwchar>
  69. #include <cwctype>
  70. #if __cplusplus >= 201103
  71. #include <atomic>
  72. #include <codecvt>
  73. #include <thread>
  74. #include <regex>
  75. #include <condition_variable>
  76. #include <array>
  77. #include <chrono>
  78. #include <future>
  79. #include <mutex>
  80. #include <type_traits>
  81. #include <typeindex>
  82. #include <cfenv>
  83. #include <initializer_list>
  84. #include <tuple>
  85. #include <scoped_allocator>
  86. #include <random>
  87. #include <ratio>
  88. #include <cstdint>
  89. #include <cinttypes>
  90. #include <forward_list>
  91. #include <unordered_map>
  92. #include <unordered_set>
  93. #include <system_error>
  94. #endif
  95. #if __cplusplus >= 201703
  96. #include <shared_mutex>
  97. #include <any>
  98. #include <optional>
  99. #include <string_view>
  100. #include <variant>
  101. #include <filesystem>
  102. #if __has_include(<experimental/array>)
  103. #include <experimental/array>
  104. #endif
  105. #if __has_include(<experimental/algorithm>)
  106. #include <experimental/algorithm>
  107. #endif
  108. #if __has_include(<experimental/deque>)
  109. #include <experimental/deque>
  110. #endif
  111. #if __has_include(<experimental/filesystem>)
  112. #include <experimental/filesystem>
  113. #endif
  114. #if __has_include(<experimental/forward_list>)
  115. #include <experimental/forward_list>
  116. #endif
  117. #if __has_include(<experimental/functional>)
  118. #include <experimental/functional>
  119. #endif
  120. #if __has_include(<experimental/iterator>)
  121. #include <experimental/iterator>
  122. #endif
  123. #if __has_include(<experimental/list>)
  124. #include <experimental/list>
  125. #endif
  126. #if __has_include(<experimental/map>)
  127. #include <experimental/map>
  128. #endif
  129. #if __has_include(<experimental/memory>)
  130. #include <experimental/memory>
  131. #endif
  132. #if __has_include(<experimental/memory_resource>)
  133. #include <experimental/memory_resource>
  134. #endif
  135. #if __has_include(<experimental/propagate_const>)
  136. #include <experimental/propagate_const>
  137. #endif
  138. #if __has_include(<experimental/random>)
  139. #include <experimental/random>
  140. #endif
  141. #if __has_include(<experimental/regex>)
  142. #include <experimental/regex>
  143. #endif
  144. #if __has_include(<experimental/set>)
  145. #include <experimental/set>
  146. #endif
  147. #if __has_include(<experimental/string>)
  148. #include <experimental/string>
  149. #endif
  150. #if __has_include(<experimental/type_traits>)
  151. #include <experimental/type_traits>
  152. #endif
  153. #if __has_include(<experimental/unordered_map>)
  154. #include <experimental/unordered_map>
  155. #endif
  156. #if __has_include(<experimental/unordered_set>)
  157. #include <experimental/unordered_set>
  158. #endif
  159. #if __has_include(<experimental/utility>)
  160. #include <experimental/utility>
  161. #endif
  162. #if __has_include(<experimental/vector>)
  163. #include <experimental/vector>
  164. #endif
  165. #endif
  166. #if __cplusplus > 201703
  167. #include <numbers>
  168. #include <concepts>
  169. #include <version>
  170. #include <compare>
  171. #include <span>
  172. #include <ranges>
  173. #include <bit>
  174. #include <stop_token>
  175. #if __has_include(<syncstream>)
  176. #include <syncstream>
  177. #endif
  178. #if __has_include(<source_location>)
  179. #include <source_location>
  180. #endif
  181. #if __has_include(<semaphore>)
  182. #include <semaphore>
  183. #endif
  184. #if __has_include(<barrier>)
  185. #include <barrier>
  186. #endif
  187. #if __has_include(<latch>)
  188. #include <latch>
  189. #endif
  190. #if __has_include(<memory_resource>)
  191. #include <memory_resource>
  192. #endif
  193. #if __has_include(<charconv>)
  194. #include <charconv>
  195. #endif
  196. #if __has_include(<coroutine>)
  197. #include <coroutine>
  198. #endif
  199. // #if __has_include(<execution>)
  200. // #include <execution>
  201. // #endif
  202. #if __has_include(<format>)
  203. #include <format>
  204. #endif
  205. #endif
  206. #if __cplusplus >= 201103
  207. extern template class std::basic_ostream<char>;
  208. extern template class std::basic_regex<char>;
  209. extern template std::string std::regex_replace<std::regex_traits<char>, char>(
  210. char const *, std::regex const &, char const *, std::regex_constants::match_flag_type);
  211. #endif
  212. char const help [] = "Mini-manual: http://www.eelis.net/geordi/";
  213. #define RANGE(x) (::std::begin(x)), (::std::end(x))
  214. #define T(n) \
  215. namespace std \
  216. { template <typename C> \
  217. std::istreambuf_iterator<C> boost_range_begin(n<C> & i) { return std::istreambuf_iterator<C>(i); } \
  218. template <typename C> \
  219. std::istreambuf_iterator<C> boost_range_end(n<C> &) { return std::istreambuf_iterator<C>(); } \
  220. }
  221. T(basic_istream)
  222. T(basic_ifstream)
  223. T(basic_istringstream)
  224. #undef T
  225. #undef assert
  226. #define assert(e) ((e) ? void() : (::std::printf("%s", "Assertion `" #e "' fails."), ::std::fclose(stdout), ::std::abort()))