webruby 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webruby/config.rb +4 -9
  3. data/lib/webruby/rake/files.rake +2 -2
  4. data/modules/emscripten/AUTHORS +9 -1
  5. data/modules/emscripten/CONTRIBUTING.markdown +5 -0
  6. data/modules/emscripten/ChangeLog +435 -0
  7. data/modules/emscripten/cmake/Modules/FindOpenAL.cmake +26 -0
  8. data/modules/emscripten/cmake/Platform/Emscripten.cmake +9 -2
  9. data/modules/emscripten/em++ +0 -2
  10. data/modules/emscripten/emcc +92 -32
  11. data/modules/emscripten/emlink.py +16 -13
  12. data/modules/emscripten/emmake +1 -1
  13. data/modules/emscripten/emrun +918 -0
  14. data/modules/emscripten/emrun.bat +2 -0
  15. data/modules/emscripten/emscripten.py +545 -20
  16. data/modules/emscripten/src/analyzer.js +6 -1
  17. data/modules/emscripten/src/compiler.js +25 -16
  18. data/modules/emscripten/src/emrun_postjs.js +20 -0
  19. data/modules/emscripten/{tests → src}/hello_world.js +0 -0
  20. data/modules/emscripten/src/intertyper.js +45 -16
  21. data/modules/emscripten/src/jsifier.js +78 -48
  22. data/modules/emscripten/src/library.js +381 -96
  23. data/modules/emscripten/src/library_browser.js +50 -53
  24. data/modules/emscripten/src/library_egl.js +66 -24
  25. data/modules/emscripten/src/library_fs.js +122 -90
  26. data/modules/emscripten/src/library_gl.js +739 -353
  27. data/modules/emscripten/src/library_glfw.js +9 -3
  28. data/modules/emscripten/src/library_glut.js +10 -5
  29. data/modules/emscripten/src/library_idbfs.js +14 -14
  30. data/modules/emscripten/src/library_memfs.js +65 -41
  31. data/modules/emscripten/src/library_nodefs.js +61 -9
  32. data/modules/emscripten/src/library_openal.js +4 -4
  33. data/modules/emscripten/src/library_path.js +9 -13
  34. data/modules/emscripten/src/library_sdl.js +301 -64
  35. data/modules/emscripten/src/library_sockfs.js +7 -5
  36. data/modules/emscripten/src/modules.js +62 -22
  37. data/modules/emscripten/src/parseTools.js +135 -102
  38. data/modules/emscripten/src/postamble.js +3 -4
  39. data/modules/emscripten/src/preamble.js +49 -29
  40. data/modules/emscripten/src/proxyClient.js +1 -1
  41. data/modules/emscripten/src/proxyWorker.js +10 -10
  42. data/modules/emscripten/src/relooper/Relooper.cpp +15 -4
  43. data/modules/emscripten/src/runtime.js +32 -8
  44. data/modules/emscripten/src/settings.js +25 -8
  45. data/modules/emscripten/src/shell.html +6 -3
  46. data/modules/emscripten/src/shell.js +13 -11
  47. data/modules/emscripten/src/simd.js +602 -432
  48. data/modules/emscripten/src/struct_info.json +22 -2
  49. data/modules/emscripten/src/utility.js +32 -17
  50. data/modules/emscripten/system/include/SDL/SDL_events.h +1 -0
  51. data/modules/emscripten/system/include/compat/ctype.h +17 -0
  52. data/modules/emscripten/system/include/compat/wchar.h +23 -0
  53. data/modules/emscripten/system/include/compat/wctype.h +23 -0
  54. data/modules/emscripten/system/include/emscripten/emmintrin.h +87 -0
  55. data/modules/emscripten/system/include/emscripten/emscripten.h +30 -4
  56. data/modules/emscripten/system/include/emscripten/vector.h +29 -1
  57. data/modules/emscripten/system/include/emscripten/xmmintrin.h +131 -0
  58. data/modules/emscripten/system/include/libcxx/CREDITS.TXT +9 -1
  59. data/modules/emscripten/system/include/libcxx/__bit_reference +8 -8
  60. data/modules/emscripten/system/include/libcxx/__config +95 -17
  61. data/modules/emscripten/system/include/libcxx/__debug +25 -4
  62. data/modules/emscripten/system/include/libcxx/__functional_03 +7 -7
  63. data/modules/emscripten/system/include/libcxx/__functional_base +169 -9
  64. data/modules/emscripten/system/include/libcxx/__functional_base_03 +1 -1
  65. data/modules/emscripten/system/include/libcxx/__hash_table +25 -25
  66. data/modules/emscripten/system/include/libcxx/__locale +21 -19
  67. data/modules/emscripten/system/include/libcxx/__mutex_base +2 -33
  68. data/modules/emscripten/system/include/libcxx/__split_buffer +9 -9
  69. data/modules/emscripten/system/include/libcxx/__std_stream +14 -0
  70. data/modules/emscripten/system/include/libcxx/__tree +35 -26
  71. data/modules/emscripten/system/include/libcxx/__tuple +15 -15
  72. data/modules/emscripten/system/include/libcxx/__tuple_03 +2 -2
  73. data/modules/emscripten/system/include/libcxx/__undef_min_max +8 -0
  74. data/modules/emscripten/system/include/libcxx/algorithm +121 -110
  75. data/modules/emscripten/system/include/libcxx/array +15 -15
  76. data/modules/emscripten/system/include/libcxx/bitset +4 -4
  77. data/modules/emscripten/system/include/libcxx/chrono +51 -17
  78. data/modules/emscripten/system/include/libcxx/cmath +25 -23
  79. data/modules/emscripten/system/include/libcxx/codecvt +21 -18
  80. data/modules/emscripten/system/include/libcxx/complex +48 -7
  81. data/modules/emscripten/system/include/libcxx/cstddef +1 -1
  82. data/modules/emscripten/system/include/libcxx/cstdio +8 -1
  83. data/modules/emscripten/system/include/libcxx/cstdlib +1 -1
  84. data/modules/emscripten/system/include/libcxx/cwchar +1 -1
  85. data/modules/emscripten/system/include/libcxx/deque +26 -12
  86. data/modules/emscripten/system/include/libcxx/dynarray +311 -0
  87. data/modules/emscripten/system/include/libcxx/exception +4 -4
  88. data/modules/emscripten/system/include/libcxx/ext/__hash +3 -3
  89. data/modules/emscripten/system/include/libcxx/ext/hash_map +19 -15
  90. data/modules/emscripten/system/include/libcxx/ext/hash_set +7 -3
  91. data/modules/emscripten/system/include/libcxx/forward_list +33 -7
  92. data/modules/emscripten/system/include/libcxx/fstream +4 -4
  93. data/modules/emscripten/system/include/libcxx/functional +200 -170
  94. data/modules/emscripten/system/include/libcxx/future +83 -39
  95. data/modules/emscripten/system/include/libcxx/initializer_list +24 -11
  96. data/modules/emscripten/system/include/libcxx/iomanip +147 -0
  97. data/modules/emscripten/system/include/libcxx/ios +24 -16
  98. data/modules/emscripten/system/include/libcxx/iosfwd +19 -19
  99. data/modules/emscripten/system/include/libcxx/istream +13 -8
  100. data/modules/emscripten/system/include/libcxx/iterator +108 -417
  101. data/modules/emscripten/system/include/libcxx/limits +8 -4
  102. data/modules/emscripten/system/include/libcxx/list +28 -8
  103. data/modules/emscripten/system/include/libcxx/locale +153 -390
  104. data/modules/emscripten/system/include/libcxx/map +280 -100
  105. data/modules/emscripten/system/include/libcxx/memory +49 -97
  106. data/modules/emscripten/system/include/libcxx/mutex +2 -2
  107. data/modules/emscripten/system/include/libcxx/new +43 -14
  108. data/modules/emscripten/system/include/libcxx/numeric +2 -2
  109. data/modules/emscripten/system/include/libcxx/optional +697 -0
  110. data/modules/emscripten/system/include/libcxx/ostream +17 -8
  111. data/modules/emscripten/system/include/libcxx/queue +5 -5
  112. data/modules/emscripten/system/include/libcxx/random +53 -51
  113. data/modules/emscripten/system/include/libcxx/ratio +11 -11
  114. data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
  115. data/modules/emscripten/system/include/libcxx/regex +23 -20
  116. data/modules/emscripten/system/include/libcxx/scoped_allocator +1 -1
  117. data/modules/emscripten/system/include/libcxx/set +166 -2
  118. data/modules/emscripten/system/include/libcxx/shared_mutex +419 -0
  119. data/modules/emscripten/system/include/libcxx/sstream +4 -4
  120. data/modules/emscripten/system/include/libcxx/stack +3 -3
  121. data/modules/emscripten/system/include/libcxx/streambuf +5 -5
  122. data/modules/emscripten/system/include/libcxx/string +372 -324
  123. data/modules/emscripten/system/include/libcxx/support/ibm/limits.h +99 -0
  124. data/modules/emscripten/system/include/libcxx/support/ibm/support.h +54 -0
  125. data/modules/emscripten/system/include/libcxx/support/ibm/xlocale.h +326 -0
  126. data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +6 -6
  127. data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -15
  128. data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +2 -0
  129. data/modules/emscripten/system/include/libcxx/support/win32/support.h +6 -1
  130. data/modules/emscripten/system/include/libcxx/system_error +14 -8
  131. data/modules/emscripten/system/include/libcxx/thread +7 -8
  132. data/modules/emscripten/system/include/libcxx/tuple +29 -88
  133. data/modules/emscripten/system/include/libcxx/type_traits +253 -209
  134. data/modules/emscripten/system/include/libcxx/typeindex +3 -3
  135. data/modules/emscripten/system/include/libcxx/unordered_map +162 -101
  136. data/modules/emscripten/system/include/libcxx/unordered_set +79 -2
  137. data/modules/emscripten/system/include/libcxx/utility +20 -20
  138. data/modules/emscripten/system/include/libcxx/valarray +23 -23
  139. data/modules/emscripten/system/include/libcxx/vector +114 -91
  140. data/modules/emscripten/system/lib/libc/musl/src/regex/regcomp.c +3352 -0
  141. data/modules/emscripten/system/lib/libc/musl/src/regex/regerror.c +35 -0
  142. data/modules/emscripten/system/lib/libc/musl/src/regex/regexec.c +1011 -0
  143. data/modules/emscripten/system/lib/libc/musl/src/regex/tre-mem.c +158 -0
  144. data/modules/emscripten/system/lib/libc/musl/src/regex/tre.h +231 -0
  145. data/modules/emscripten/system/lib/libcextra.symbols +7 -0
  146. data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +9 -1
  147. data/modules/emscripten/system/lib/libcxx/algorithm.cpp +1 -0
  148. data/modules/emscripten/system/lib/libcxx/debug.cpp +66 -42
  149. data/modules/emscripten/system/lib/libcxx/exception.cpp +88 -16
  150. data/modules/emscripten/system/lib/libcxx/future.cpp +6 -0
  151. data/modules/emscripten/system/lib/libcxx/ios.cpp +7 -2
  152. data/modules/emscripten/system/lib/libcxx/iostream.cpp +8 -8
  153. data/modules/emscripten/system/lib/libcxx/locale.cpp +38 -11
  154. data/modules/emscripten/system/lib/libcxx/mutex.cpp +3 -0
  155. data/modules/emscripten/system/lib/libcxx/new.cpp +44 -10
  156. data/modules/emscripten/system/lib/libcxx/optional.cpp +25 -0
  157. data/modules/emscripten/system/lib/libcxx/random.cpp +26 -0
  158. data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
  159. data/modules/emscripten/system/lib/libcxx/shared_mutex.cpp +101 -0
  160. data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +11 -7
  161. data/modules/emscripten/system/lib/libcxx/string.cpp +3 -1
  162. data/modules/emscripten/system/lib/libcxx/strstream.cpp +7 -7
  163. data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +12 -13
  164. data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +33 -36
  165. data/modules/emscripten/system/lib/libcxx/symbols +187 -168
  166. data/modules/emscripten/system/lib/libcxx/system_error.cpp +1 -0
  167. data/modules/emscripten/system/lib/libcxx/thread.cpp +7 -3
  168. data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +9 -6
  169. data/modules/emscripten/system/lib/libcxx/valarray.cpp +2 -0
  170. data/modules/emscripten/third_party/lzma.js/doit.bat +4 -0
  171. data/modules/emscripten/third_party/lzma.js/doit.sh +9 -2
  172. data/modules/emscripten/tools/cache.py +5 -7
  173. data/modules/emscripten/tools/cache.pyc +0 -0
  174. data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +7 -0
  175. data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +9 -1
  176. data/modules/emscripten/tools/eliminator/eliminator-test-output.js +3 -0
  177. data/modules/emscripten/tools/eliminator/eliminator-test.js +9 -1
  178. data/modules/emscripten/tools/file_packager.py +93 -50
  179. data/modules/emscripten/tools/js-optimizer.js +98 -48
  180. data/modules/emscripten/tools/js_optimizer.py +4 -4
  181. data/modules/emscripten/tools/js_optimizer.pyc +0 -0
  182. data/modules/emscripten/tools/jsrun.py +1 -1
  183. data/modules/emscripten/tools/jsrun.pyc +0 -0
  184. data/modules/emscripten/tools/response_file.py +6 -0
  185. data/modules/emscripten/tools/response_file.pyc +0 -0
  186. data/modules/emscripten/tools/settings_template_readonly.py +2 -0
  187. data/modules/emscripten/tools/shared.py +88 -34
  188. data/modules/emscripten/tools/shared.pyc +0 -0
  189. data/modules/emscripten/tools/split.py +21 -13
  190. data/modules/mruby/build_config.rb +7 -1
  191. data/modules/mruby/doc/compile/README.md +5 -9
  192. data/modules/mruby/include/mrbconf.h +5 -2
  193. data/modules/mruby/include/mruby/array.h +1 -0
  194. data/modules/mruby/include/mruby/compile.h +2 -4
  195. data/modules/mruby/include/mruby/dump.h +7 -16
  196. data/modules/mruby/include/mruby/hash.h +1 -1
  197. data/modules/mruby/include/mruby/irep.h +14 -2
  198. data/modules/mruby/include/mruby/khash.h +8 -7
  199. data/modules/mruby/include/mruby/string.h +1 -0
  200. data/modules/mruby/include/mruby/value.h +5 -2
  201. data/modules/mruby/include/mruby.h +12 -13
  202. data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +16 -6
  203. data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +18 -30
  204. data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +21 -0
  205. data/modules/mruby/mrbgems/mruby-math/src/math.c +1 -1
  206. data/modules/mruby/mrbgems/mruby-random/src/random.c +144 -47
  207. data/modules/mruby/mrbgems/mruby-random/test/random.rb +44 -0
  208. data/modules/mruby/mrbgems/mruby-struct/src/struct.c +5 -5
  209. data/modules/mruby/mrblib/numeric.rb +99 -33
  210. data/modules/mruby/src/array.c +11 -4
  211. data/modules/mruby/src/backtrace.c +2 -2
  212. data/modules/mruby/src/class.c +49 -30
  213. data/modules/mruby/src/codegen.c +131 -79
  214. data/modules/mruby/src/debug.c +1 -1
  215. data/modules/mruby/src/dump.c +213 -163
  216. data/modules/mruby/src/error.c +17 -17
  217. data/modules/mruby/src/error.h +1 -1
  218. data/modules/mruby/src/etc.c +10 -0
  219. data/modules/mruby/src/gc.c +35 -17
  220. data/modules/mruby/src/hash.c +5 -5
  221. data/modules/mruby/src/kernel.c +36 -14
  222. data/modules/mruby/src/load.c +238 -296
  223. data/modules/mruby/src/numeric.c +18 -98
  224. data/modules/mruby/src/object.c +3 -5
  225. data/modules/mruby/src/parse.y +63 -56
  226. data/modules/mruby/src/proc.c +8 -5
  227. data/modules/mruby/src/re.h +0 -1
  228. data/modules/mruby/src/state.c +65 -27
  229. data/modules/mruby/src/string.c +3 -31
  230. data/modules/mruby/src/symbol.c +3 -3
  231. data/modules/mruby/src/variable.c +12 -5
  232. data/modules/mruby/src/vm.c +90 -72
  233. data/modules/mruby/tasks/mruby_build.rake +10 -1
  234. data/modules/mruby/tasks/toolchains/gcc.rake +12 -2
  235. data/modules/mruby/tasks/toolchains/{vs2012.rake → visualcpp.rake} +1 -1
  236. data/modules/mruby/test/driver.c +3 -3
  237. data/modules/mruby/test/t/array.rb +5 -5
  238. data/modules/mruby/test/t/class.rb +14 -1
  239. data/modules/mruby/test/t/kernel.rb +4 -0
  240. data/modules/mruby/test/t/module.rb +4 -4
  241. data/modules/mruby/test/t/nameerror.rb +1 -1
  242. data/modules/mruby/tools/mrbc/mrbc.c +23 -17
  243. data/modules/mruby/travis_config.rb +10 -1
  244. metadata +28 -5
  245. data/modules/mruby/tasks/toolchains/vs2010.rake +0 -3
@@ -19,11 +19,13 @@
19
19
  #include <cstdint>
20
20
  #include <cctype>
21
21
  #include <locale.h>
22
- #ifdef _LIBCPP_MSVCRT
22
+ #if defined(_LIBCPP_MSVCRT) || defined(__MINGW32__)
23
23
  # include <support/win32/locale_win32.h>
24
- #elif (defined(__GLIBC__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__)) || defined(__EMSCRIPTEN__)
24
+ #elif _AIX
25
+ # include <support/ibm/xlocale.h>
26
+ #elif (defined(__GLIBC__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__)) || defined(__EMSCRIPTEN__) || defined(__IBMCPP__)
25
27
  # include <xlocale.h>
26
- #endif // _WIN32 || __GLIBC__ || __APPLE__ || __FreeBSD__ || __sun__ || __EMSCRIPTEN__
28
+ #endif // _WIN32 || __GLIBC__ || __APPLE__ || __FreeBSD__ || __sun__ || __EMSCRIPTEN__ || __IBMCPP__
27
29
 
28
30
  #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
29
31
  #pragma GCC system_header
@@ -175,7 +177,7 @@ use_facet(const locale& __l)
175
177
  // template <class _CharT> class collate;
176
178
 
177
179
  template <class _CharT>
178
- class _LIBCPP_TYPE_VIS collate
180
+ class _LIBCPP_TYPE_VIS_ONLY collate
179
181
  : public locale::facet
180
182
  {
181
183
  public:
@@ -254,12 +256,12 @@ collate<_CharT>::do_hash(const char_type* __lo, const char_type* __hi) const
254
256
  return static_cast<long>(__h);
255
257
  }
256
258
 
257
- _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS collate<char>)
258
- _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS collate<wchar_t>)
259
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS collate<char>)
260
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS collate<wchar_t>)
259
261
 
260
262
  // template <class CharT> class collate_byname;
261
263
 
262
- template <class _CharT> class _LIBCPP_TYPE_VIS collate_byname;
264
+ template <class _CharT> class _LIBCPP_TYPE_VIS_ONLY collate_byname;
263
265
 
264
266
  template <>
265
267
  class _LIBCPP_TYPE_VIS collate_byname<char>
@@ -361,7 +363,7 @@ public:
361
363
  # else
362
364
  static const mask blank = _CTYPE_B;
363
365
  # endif
364
- #elif defined(__sun__)
366
+ #elif defined(__sun__) || defined(_AIX)
365
367
  typedef unsigned int mask;
366
368
  static const mask space = _ISSPACE;
367
369
  static const mask print = _ISPRINT;
@@ -392,7 +394,7 @@ public:
392
394
  _LIBCPP_ALWAYS_INLINE ctype_base() {}
393
395
  };
394
396
 
395
- template <class _CharT> class _LIBCPP_TYPE_VIS ctype;
397
+ template <class _CharT> class _LIBCPP_TYPE_VIS_ONLY ctype;
396
398
 
397
399
  template <>
398
400
  class _LIBCPP_TYPE_VIS ctype<wchar_t>
@@ -510,7 +512,7 @@ public:
510
512
  _LIBCPP_ALWAYS_INLINE
511
513
  bool is(mask __m, char_type __c) const
512
514
  {
513
- return isascii(__c) ? __tab_[static_cast<int>(__c)] & __m : false;
515
+ return isascii(__c) ? (__tab_[static_cast<int>(__c)] & __m) !=0 : false;
514
516
  }
515
517
 
516
518
  _LIBCPP_ALWAYS_INLINE
@@ -619,7 +621,7 @@ protected:
619
621
 
620
622
  // template <class CharT> class ctype_byname;
621
623
 
622
- template <class _CharT> class _LIBCPP_TYPE_VIS ctype_byname;
624
+ template <class _CharT> class _LIBCPP_TYPE_VIS_ONLY ctype_byname;
623
625
 
624
626
  template <>
625
627
  class _LIBCPP_TYPE_VIS ctype_byname<char>
@@ -780,7 +782,7 @@ public:
780
782
 
781
783
  // template <class internT, class externT, class stateT> class codecvt;
782
784
 
783
- template <class _InternT, class _ExternT, class _StateT> class _LIBCPP_TYPE_VIS codecvt;
785
+ template <class _InternT, class _ExternT, class _StateT> class _LIBCPP_TYPE_VIS_ONLY codecvt;
784
786
 
785
787
  // template <> class codecvt<char, char, mbstate_t>
786
788
 
@@ -1126,7 +1128,7 @@ protected:
1126
1128
  // template <class _InternT, class _ExternT, class _StateT> class codecvt_byname
1127
1129
 
1128
1130
  template <class _InternT, class _ExternT, class _StateT>
1129
- class _LIBCPP_TYPE_VIS codecvt_byname
1131
+ class _LIBCPP_TYPE_VIS_ONLY codecvt_byname
1130
1132
  : public codecvt<_InternT, _ExternT, _StateT>
1131
1133
  {
1132
1134
  public:
@@ -1145,10 +1147,10 @@ codecvt_byname<_InternT, _ExternT, _StateT>::~codecvt_byname()
1145
1147
  {
1146
1148
  }
1147
1149
 
1148
- _LIBCPP_EXTERN_TEMPLATE(class codecvt_byname<char, char, mbstate_t>)
1149
- _LIBCPP_EXTERN_TEMPLATE(class codecvt_byname<wchar_t, char, mbstate_t>)
1150
- _LIBCPP_EXTERN_TEMPLATE(class codecvt_byname<char16_t, char, mbstate_t>)
1151
- _LIBCPP_EXTERN_TEMPLATE(class codecvt_byname<char32_t, char, mbstate_t>)
1150
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS codecvt_byname<char, char, mbstate_t>)
1151
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS codecvt_byname<wchar_t, char, mbstate_t>)
1152
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS codecvt_byname<char16_t, char, mbstate_t>)
1153
+ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS codecvt_byname<char32_t, char, mbstate_t>)
1152
1154
 
1153
1155
  _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*);
1154
1156
 
@@ -1334,7 +1336,7 @@ struct __widen_from_utf8<32>
1334
1336
 
1335
1337
  // template <class charT> class numpunct
1336
1338
 
1337
- template <class _CharT> class _LIBCPP_TYPE_VIS numpunct;
1339
+ template <class _CharT> class _LIBCPP_TYPE_VIS_ONLY numpunct;
1338
1340
 
1339
1341
  template <>
1340
1342
  class _LIBCPP_TYPE_VIS numpunct<char>
@@ -1400,7 +1402,7 @@ protected:
1400
1402
 
1401
1403
  // template <class charT> class numpunct_byname
1402
1404
 
1403
- template <class charT> class _LIBCPP_TYPE_VIS numpunct_byname;
1405
+ template <class charT> class _LIBCPP_TYPE_VIS_ONLY numpunct_byname;
1404
1406
 
1405
1407
  template <>
1406
1408
  class _LIBCPP_TYPE_VIS numpunct_byname<char>
@@ -20,16 +20,6 @@
20
20
  #pragma GCC system_header
21
21
  #endif
22
22
 
23
- #ifdef _LIBCPP_SHARED_LOCK
24
-
25
- namespace ting {
26
- template <class _Mutex> class shared_lock;
27
- template <class _Mutex> class upgrade_lock;
28
- }
29
-
30
- #endif // _LIBCPP_SHARED_LOCK
31
-
32
-
33
23
  _LIBCPP_BEGIN_NAMESPACE_STD
34
24
 
35
25
  class _LIBCPP_TYPE_VIS mutex
@@ -77,7 +67,7 @@ constexpr adopt_lock_t adopt_lock = adopt_lock_t();
77
67
  #endif
78
68
 
79
69
  template <class _Mutex>
80
- class _LIBCPP_TYPE_VIS lock_guard
70
+ class _LIBCPP_TYPE_VIS_ONLY lock_guard
81
71
  {
82
72
  public:
83
73
  typedef _Mutex mutex_type;
@@ -101,7 +91,7 @@ private:
101
91
  };
102
92
 
103
93
  template <class _Mutex>
104
- class _LIBCPP_TYPE_VIS unique_lock
94
+ class _LIBCPP_TYPE_VIS_ONLY unique_lock
105
95
  {
106
96
  public:
107
97
  typedef _Mutex mutex_type;
@@ -162,27 +152,6 @@ public:
162
152
  return *this;
163
153
  }
164
154
 
165
- #ifdef _LIBCPP_SHARED_LOCK
166
-
167
- unique_lock(ting::shared_lock<mutex_type>&&, try_to_lock_t);
168
- template <class _Clock, class _Duration>
169
- unique_lock(ting::shared_lock<mutex_type>&&,
170
- const chrono::time_point<_Clock, _Duration>&);
171
- template <class _Rep, class _Period>
172
- unique_lock(ting::shared_lock<mutex_type>&&,
173
- const chrono::duration<_Rep, _Period>&);
174
-
175
- explicit unique_lock(ting::upgrade_lock<mutex_type>&&);
176
- unique_lock(ting::upgrade_lock<mutex_type>&&, try_to_lock_t);
177
- template <class _Clock, class _Duration>
178
- unique_lock(ting::upgrade_lock<mutex_type>&&,
179
- const chrono::time_point<_Clock, _Duration>&);
180
- template <class _Rep, class _Period>
181
- unique_lock(ting::upgrade_lock<mutex_type>&&,
182
- const chrono::duration<_Rep, _Period>&);
183
-
184
- #endif // _LIBCPP_SHARED_LOCK
185
-
186
155
  #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
187
156
 
188
157
  void lock();
@@ -285,7 +285,7 @@ __split_buffer<_Tp, _Allocator>::__construct_at_end(_ForwardIterator __first, _F
285
285
  }
286
286
 
287
287
  template <class _Tp, class _Allocator>
288
- _LIBCPP_INLINE_VISIBILITY inline
288
+ inline _LIBCPP_INLINE_VISIBILITY
289
289
  void
290
290
  __split_buffer<_Tp, _Allocator>::__destruct_at_begin(pointer __new_begin, false_type)
291
291
  {
@@ -294,7 +294,7 @@ __split_buffer<_Tp, _Allocator>::__destruct_at_begin(pointer __new_begin, false_
294
294
  }
295
295
 
296
296
  template <class _Tp, class _Allocator>
297
- _LIBCPP_INLINE_VISIBILITY inline
297
+ inline _LIBCPP_INLINE_VISIBILITY
298
298
  void
299
299
  __split_buffer<_Tp, _Allocator>::__destruct_at_begin(pointer __new_begin, true_type)
300
300
  {
@@ -302,7 +302,7 @@ __split_buffer<_Tp, _Allocator>::__destruct_at_begin(pointer __new_begin, true_t
302
302
  }
303
303
 
304
304
  template <class _Tp, class _Allocator>
305
- _LIBCPP_INLINE_VISIBILITY inline
305
+ inline _LIBCPP_INLINE_VISIBILITY
306
306
  void
307
307
  __split_buffer<_Tp, _Allocator>::__destruct_at_end(pointer __new_last, false_type) _NOEXCEPT
308
308
  {
@@ -311,7 +311,7 @@ __split_buffer<_Tp, _Allocator>::__destruct_at_end(pointer __new_last, false_typ
311
311
  }
312
312
 
313
313
  template <class _Tp, class _Allocator>
314
- _LIBCPP_INLINE_VISIBILITY inline
314
+ inline _LIBCPP_INLINE_VISIBILITY
315
315
  void
316
316
  __split_buffer<_Tp, _Allocator>::__destruct_at_end(pointer __new_last, true_type) _NOEXCEPT
317
317
  {
@@ -328,7 +328,7 @@ __split_buffer<_Tp, _Allocator>::__split_buffer(size_type __cap, size_type __sta
328
328
  }
329
329
 
330
330
  template <class _Tp, class _Allocator>
331
- _LIBCPP_INLINE_VISIBILITY inline
331
+ inline _LIBCPP_INLINE_VISIBILITY
332
332
  __split_buffer<_Tp, _Allocator>::__split_buffer()
333
333
  _NOEXCEPT_(is_nothrow_default_constructible<allocator_type>::value)
334
334
  : __first_(nullptr), __begin_(nullptr), __end_(nullptr), __end_cap_(nullptr)
@@ -336,14 +336,14 @@ __split_buffer<_Tp, _Allocator>::__split_buffer()
336
336
  }
337
337
 
338
338
  template <class _Tp, class _Allocator>
339
- _LIBCPP_INLINE_VISIBILITY inline
339
+ inline _LIBCPP_INLINE_VISIBILITY
340
340
  __split_buffer<_Tp, _Allocator>::__split_buffer(__alloc_rr& __a)
341
341
  : __first_(nullptr), __begin_(nullptr), __end_(nullptr), __end_cap_(nullptr, __a)
342
342
  {
343
343
  }
344
344
 
345
345
  template <class _Tp, class _Allocator>
346
- _LIBCPP_INLINE_VISIBILITY inline
346
+ inline _LIBCPP_INLINE_VISIBILITY
347
347
  __split_buffer<_Tp, _Allocator>::__split_buffer(const __alloc_rr& __a)
348
348
  : __first_(nullptr), __begin_(nullptr), __end_(nullptr), __end_cap_(nullptr, __a)
349
349
  {
@@ -541,7 +541,7 @@ __split_buffer<_Tp, _Allocator>::push_front(value_type&& __x)
541
541
  #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
542
542
 
543
543
  template <class _Tp, class _Allocator>
544
- _LIBCPP_INLINE_VISIBILITY inline
544
+ inline _LIBCPP_INLINE_VISIBILITY
545
545
  void
546
546
  __split_buffer<_Tp, _Allocator>::push_back(const_reference __x)
547
547
  {
@@ -640,7 +640,7 @@ __split_buffer<_Tp, _Allocator>::emplace_back(_Args&&... __args)
640
640
  #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
641
641
 
642
642
  template <class _Tp, class _Allocator>
643
- _LIBCPP_INLINE_VISIBILITY inline
643
+ inline _LIBCPP_INLINE_VISIBILITY
644
644
  void
645
645
  swap(__split_buffer<_Tp, _Allocator>& __x, __split_buffer<_Tp, _Allocator>& __y)
646
646
  _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y)))
@@ -233,6 +233,7 @@ public:
233
233
 
234
234
  protected:
235
235
  virtual int_type overflow (int_type __c = traits_type::eof());
236
+ virtual streamsize xsputn(const char_type* __s, streamsize __n);
236
237
  virtual int sync();
237
238
  virtual void imbue(const locale& __loc);
238
239
 
@@ -308,6 +309,19 @@ __stdoutbuf<_CharT>::overflow(int_type __c)
308
309
  return traits_type::not_eof(__c);
309
310
  }
310
311
 
312
+ template <class _CharT>
313
+ streamsize
314
+ __stdoutbuf<_CharT>::xsputn(const char_type* __s, streamsize __n)
315
+ {
316
+ if (__always_noconv_)
317
+ return fwrite(__s, sizeof(char_type), __n, __file_);
318
+ streamsize __i = 0;
319
+ for (; __i < __n; ++__i, ++__s)
320
+ if (overflow(traits_type::to_int_type(*__s)) == traits_type::eof())
321
+ break;
322
+ return __i;
323
+ }
324
+
311
325
  template <class _CharT>
312
326
  int
313
327
  __stdoutbuf<_CharT>::sync()
@@ -25,17 +25,17 @@ _LIBCPP_BEGIN_NAMESPACE_STD
25
25
 
26
26
  template <class _Tp, class _Compare, class _Allocator> class __tree;
27
27
  template <class _Tp, class _NodePtr, class _DiffType>
28
- class _LIBCPP_TYPE_VIS __tree_iterator;
28
+ class _LIBCPP_TYPE_VIS_ONLY __tree_iterator;
29
29
  template <class _Tp, class _ConstNodePtr, class _DiffType>
30
- class _LIBCPP_TYPE_VIS __tree_const_iterator;
30
+ class _LIBCPP_TYPE_VIS_ONLY __tree_const_iterator;
31
31
  template <class _Key, class _Tp, class _Compare, class _Allocator>
32
- class _LIBCPP_TYPE_VIS map;
32
+ class _LIBCPP_TYPE_VIS_ONLY map;
33
33
  template <class _Key, class _Tp, class _Compare, class _Allocator>
34
- class _LIBCPP_TYPE_VIS multimap;
34
+ class _LIBCPP_TYPE_VIS_ONLY multimap;
35
35
  template <class _Key, class _Compare, class _Allocator>
36
- class _LIBCPP_TYPE_VIS set;
36
+ class _LIBCPP_TYPE_VIS_ONLY set;
37
37
  template <class _Key, class _Compare, class _Allocator>
38
- class _LIBCPP_TYPE_VIS multiset;
38
+ class _LIBCPP_TYPE_VIS_ONLY multiset;
39
39
 
40
40
  /*
41
41
 
@@ -614,11 +614,11 @@ public:
614
614
  #endif // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
615
615
  };
616
616
 
617
- template <class _TreeIterator> class _LIBCPP_TYPE_VIS __map_iterator;
618
- template <class _TreeIterator> class _LIBCPP_TYPE_VIS __map_const_iterator;
617
+ template <class _TreeIterator> class _LIBCPP_TYPE_VIS_ONLY __map_iterator;
618
+ template <class _TreeIterator> class _LIBCPP_TYPE_VIS_ONLY __map_const_iterator;
619
619
 
620
620
  template <class _Tp, class _NodePtr, class _DiffType>
621
- class _LIBCPP_TYPE_VIS __tree_iterator
621
+ class _LIBCPP_TYPE_VIS_ONLY __tree_iterator
622
622
  {
623
623
  typedef _NodePtr __node_pointer;
624
624
  typedef typename pointer_traits<__node_pointer>::element_type __node;
@@ -641,7 +641,11 @@ public:
641
641
  #endif
642
642
  pointer;
643
643
 
644
- _LIBCPP_INLINE_VISIBILITY __tree_iterator() _NOEXCEPT {}
644
+ _LIBCPP_INLINE_VISIBILITY __tree_iterator() _NOEXCEPT
645
+ #if _LIBCPP_STD_VER > 11
646
+ : __ptr_(nullptr)
647
+ #endif
648
+ {}
645
649
 
646
650
  _LIBCPP_INLINE_VISIBILITY reference operator*() const {return __ptr_->__value_;}
647
651
  _LIBCPP_INLINE_VISIBILITY pointer operator->() const
@@ -674,16 +678,16 @@ private:
674
678
  _LIBCPP_INLINE_VISIBILITY
675
679
  explicit __tree_iterator(__node_pointer __p) _NOEXCEPT : __ptr_(__p) {}
676
680
  template <class, class, class> friend class __tree;
677
- template <class, class, class> friend class _LIBCPP_TYPE_VIS __tree_const_iterator;
678
- template <class> friend class _LIBCPP_TYPE_VIS __map_iterator;
679
- template <class, class, class, class> friend class _LIBCPP_TYPE_VIS map;
680
- template <class, class, class, class> friend class _LIBCPP_TYPE_VIS multimap;
681
- template <class, class, class> friend class _LIBCPP_TYPE_VIS set;
682
- template <class, class, class> friend class _LIBCPP_TYPE_VIS multiset;
681
+ template <class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY __tree_const_iterator;
682
+ template <class> friend class _LIBCPP_TYPE_VIS_ONLY __map_iterator;
683
+ template <class, class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY map;
684
+ template <class, class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY multimap;
685
+ template <class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY set;
686
+ template <class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY multiset;
683
687
  };
684
688
 
685
689
  template <class _Tp, class _ConstNodePtr, class _DiffType>
686
- class _LIBCPP_TYPE_VIS __tree_const_iterator
690
+ class _LIBCPP_TYPE_VIS_ONLY __tree_const_iterator
687
691
  {
688
692
  typedef _ConstNodePtr __node_pointer;
689
693
  typedef typename pointer_traits<__node_pointer>::element_type __node;
@@ -712,7 +716,12 @@ public:
712
716
  #endif
713
717
  pointer;
714
718
 
715
- _LIBCPP_INLINE_VISIBILITY __tree_const_iterator() {}
719
+ _LIBCPP_INLINE_VISIBILITY __tree_const_iterator() _NOEXCEPT
720
+ #if _LIBCPP_STD_VER > 11
721
+ : __ptr_(nullptr)
722
+ #endif
723
+ {}
724
+
716
725
  private:
717
726
  typedef typename remove_const<__node>::type __non_const_node;
718
727
  typedef typename pointer_traits<__node_pointer>::template
@@ -761,11 +770,11 @@ private:
761
770
  explicit __tree_const_iterator(__node_pointer __p) _NOEXCEPT
762
771
  : __ptr_(__p) {}
763
772
  template <class, class, class> friend class __tree;
764
- template <class, class, class, class> friend class _LIBCPP_TYPE_VIS map;
765
- template <class, class, class, class> friend class _LIBCPP_TYPE_VIS multimap;
766
- template <class, class, class> friend class _LIBCPP_TYPE_VIS set;
767
- template <class, class, class> friend class _LIBCPP_TYPE_VIS multiset;
768
- template <class> friend class _LIBCPP_TYPE_VIS __map_const_iterator;
773
+ template <class, class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY map;
774
+ template <class, class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY multimap;
775
+ template <class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY set;
776
+ template <class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY multiset;
777
+ template <class> friend class _LIBCPP_TYPE_VIS_ONLY __map_const_iterator;
769
778
  };
770
779
 
771
780
  template <class _Tp, class _Compare, class _Allocator>
@@ -1107,8 +1116,8 @@ private:
1107
1116
  __node_pointer __detach();
1108
1117
  static __node_pointer __detach(__node_pointer);
1109
1118
 
1110
- template <class, class, class, class> friend class _LIBCPP_TYPE_VIS map;
1111
- template <class, class, class, class> friend class _LIBCPP_TYPE_VIS multimap;
1119
+ template <class, class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY map;
1120
+ template <class, class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY multimap;
1112
1121
  };
1113
1122
 
1114
1123
  template <class _Tp, class _Compare, class _Allocator>
@@ -1845,7 +1854,7 @@ __tree<_Tp, _Compare, _Allocator>::__construct_node(const value_type& __v)
1845
1854
  __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
1846
1855
  __node_traits::construct(__na, _VSTD::addressof(__h->__value_), __v);
1847
1856
  __h.get_deleter().__value_constructed = true;
1848
- return _VSTD::move(__h);
1857
+ return _VSTD::move(__h); // explicitly moved for C++03
1849
1858
  }
1850
1859
 
1851
1860
  #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
@@ -27,46 +27,46 @@
27
27
 
28
28
  _LIBCPP_BEGIN_NAMESPACE_STD
29
29
 
30
- template <class _Tp> class _LIBCPP_TYPE_VIS tuple_size;
30
+ template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY tuple_size;
31
31
 
32
32
  template <class _Tp>
33
- class _LIBCPP_TYPE_VIS tuple_size<const _Tp>
33
+ class _LIBCPP_TYPE_VIS_ONLY tuple_size<const _Tp>
34
34
  : public tuple_size<_Tp> {};
35
35
 
36
36
  template <class _Tp>
37
- class _LIBCPP_TYPE_VIS tuple_size<volatile _Tp>
37
+ class _LIBCPP_TYPE_VIS_ONLY tuple_size<volatile _Tp>
38
38
  : public tuple_size<_Tp> {};
39
39
 
40
40
  template <class _Tp>
41
- class _LIBCPP_TYPE_VIS tuple_size<const volatile _Tp>
41
+ class _LIBCPP_TYPE_VIS_ONLY tuple_size<const volatile _Tp>
42
42
  : public tuple_size<_Tp> {};
43
43
 
44
- template <size_t _Ip, class _Tp> class _LIBCPP_TYPE_VIS tuple_element;
44
+ template <size_t _Ip, class _Tp> class _LIBCPP_TYPE_VIS_ONLY tuple_element;
45
45
 
46
46
  template <size_t _Ip, class _Tp>
47
- class _LIBCPP_TYPE_VIS tuple_element<_Ip, const _Tp>
47
+ class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, const _Tp>
48
48
  {
49
49
  public:
50
50
  typedef typename add_const<typename tuple_element<_Ip, _Tp>::type>::type type;
51
51
  };
52
52
 
53
53
  template <size_t _Ip, class _Tp>
54
- class _LIBCPP_TYPE_VIS tuple_element<_Ip, volatile _Tp>
54
+ class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, volatile _Tp>
55
55
  {
56
56
  public:
57
57
  typedef typename add_volatile<typename tuple_element<_Ip, _Tp>::type>::type type;
58
58
  };
59
59
 
60
60
  template <size_t _Ip, class _Tp>
61
- class _LIBCPP_TYPE_VIS tuple_element<_Ip, const volatile _Tp>
61
+ class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, const volatile _Tp>
62
62
  {
63
63
  public:
64
64
  typedef typename add_cv<typename tuple_element<_Ip, _Tp>::type>::type type;
65
65
  };
66
66
 
67
- template <class ..._Tp> class _LIBCPP_TYPE_VIS tuple;
68
- template <class _T1, class _T2> struct _LIBCPP_TYPE_VIS pair;
69
- template <class _Tp, size_t _Size> struct _LIBCPP_TYPE_VIS array;
67
+ template <class ..._Tp> class _LIBCPP_TYPE_VIS_ONLY tuple;
68
+ template <class _T1, class _T2> struct _LIBCPP_TYPE_VIS_ONLY pair;
69
+ template <class _Tp, size_t _Size> struct _LIBCPP_TYPE_VIS_ONLY array;
70
70
 
71
71
  template <class _Tp> struct __tuple_like : false_type {};
72
72
 
@@ -154,7 +154,7 @@ struct __make_tuple_indices
154
154
  template <class ..._Tp> struct __tuple_types {};
155
155
 
156
156
  template <size_t _Ip>
157
- class _LIBCPP_TYPE_VIS tuple_element<_Ip, __tuple_types<> >
157
+ class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, __tuple_types<> >
158
158
  {
159
159
  public:
160
160
  static_assert(_Ip == 0, "tuple_element index out of range");
@@ -162,21 +162,21 @@ public:
162
162
  };
163
163
 
164
164
  template <class _Hp, class ..._Tp>
165
- class _LIBCPP_TYPE_VIS tuple_element<0, __tuple_types<_Hp, _Tp...> >
165
+ class _LIBCPP_TYPE_VIS_ONLY tuple_element<0, __tuple_types<_Hp, _Tp...> >
166
166
  {
167
167
  public:
168
168
  typedef _Hp type;
169
169
  };
170
170
 
171
171
  template <size_t _Ip, class _Hp, class ..._Tp>
172
- class _LIBCPP_TYPE_VIS tuple_element<_Ip, __tuple_types<_Hp, _Tp...> >
172
+ class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, __tuple_types<_Hp, _Tp...> >
173
173
  {
174
174
  public:
175
175
  typedef typename tuple_element<_Ip-1, __tuple_types<_Tp...> >::type type;
176
176
  };
177
177
 
178
178
  template <class ..._Tp>
179
- class _LIBCPP_TYPE_VIS tuple_size<__tuple_types<_Tp...> >
179
+ class _LIBCPP_TYPE_VIS_ONLY tuple_size<__tuple_types<_Tp...> >
180
180
  : public integral_constant<size_t, sizeof...(_Tp)>
181
181
  {
182
182
  };
@@ -19,8 +19,8 @@
19
19
 
20
20
  _LIBCPP_BEGIN_NAMESPACE_STD
21
21
 
22
- template <class _Tp> class _LIBCPP_TYPE_VIS tuple_size;
23
- template <size_t _Ip, class _Tp> class _LIBCPP_TYPE_VIS tuple_element;
22
+ template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY tuple_size;
23
+ template <size_t _Ip, class _Tp> class _LIBCPP_TYPE_VIS_ONLY tuple_element;
24
24
 
25
25
  _LIBCPP_END_NAMESPACE_STD
26
26
 
@@ -9,11 +9,19 @@
9
9
  //===----------------------------------------------------------------------===//
10
10
 
11
11
  #ifdef min
12
+ #if defined(_MSC_VER) && ! defined(__clang__)
13
+ _LIBCPP_WARNING("macro min is incompatible with C++. #undefing min")
14
+ #else
12
15
  #warning: macro min is incompatible with C++. #undefing min
16
+ #endif
13
17
  #undef min
14
18
  #endif
15
19
 
16
20
  #ifdef max
21
+ #if defined(_MSC_VER) && ! defined(__clang__)
22
+ _LIBCPP_WARNING("macro max is incompatible with C++. #undefing max")
23
+ #else
17
24
  #warning: macro max is incompatible with C++. #undefing max
25
+ #endif
18
26
  #undef max
19
27
  #endif