webruby 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (258) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webruby/rake/mruby.rake +1 -0
  3. data/modules/emscripten/AUTHORS +7 -0
  4. data/modules/emscripten/LICENSE +26 -0
  5. data/modules/emscripten/emcc +58 -20
  6. data/modules/emscripten/emlink.py +2 -265
  7. data/modules/emscripten/emscripten.py +38 -18
  8. data/modules/emscripten/scons-tools/emscripten.py +11 -6
  9. data/modules/emscripten/scons-tools/llvm.py +4 -3
  10. data/modules/emscripten/src/analyzer.js +32 -13
  11. data/modules/emscripten/src/embind/embind.js +13 -13
  12. data/modules/emscripten/src/embind/emval.js +8 -7
  13. data/modules/emscripten/src/intertyper.js +10 -0
  14. data/modules/emscripten/src/jsifier.js +28 -6
  15. data/modules/emscripten/src/library.js +2949 -1322
  16. data/modules/emscripten/src/library_browser.js +27 -23
  17. data/modules/emscripten/src/library_egl.js +7 -2
  18. data/modules/emscripten/src/library_gl.js +15 -2
  19. data/modules/emscripten/src/library_glut.js +1 -1
  20. data/modules/emscripten/src/library_jansson.js +1 -1
  21. data/modules/emscripten/src/library_openal.js +464 -132
  22. data/modules/emscripten/src/library_path.js +134 -0
  23. data/modules/emscripten/src/library_sdl.js +222 -50
  24. data/modules/emscripten/src/modules.js +22 -5
  25. data/modules/emscripten/src/parseTools.js +13 -2
  26. data/modules/emscripten/src/postamble.js +60 -34
  27. data/modules/emscripten/src/preamble.js +67 -18
  28. data/modules/emscripten/src/relooper/Relooper.cpp +1 -1
  29. data/modules/emscripten/src/runtime.js +12 -2
  30. data/modules/emscripten/src/settings.js +869 -826
  31. data/modules/emscripten/src/shell.js +63 -51
  32. data/modules/emscripten/src/utility.js +6 -0
  33. data/modules/emscripten/system/include/bsd/sys/mman.h +1 -1
  34. data/modules/emscripten/system/include/emscripten/bind.h +28 -28
  35. data/modules/emscripten/system/include/libc/math.h +8 -0
  36. data/modules/emscripten/system/include/libc/sys/signal.h +3 -1
  37. data/modules/emscripten/system/include/libc/sys/stat.h +2 -1
  38. data/modules/emscripten/system/include/libc/sys/types.h +4 -0
  39. data/modules/emscripten/system/include/libcxx/CREDITS.TXT +24 -0
  40. data/modules/emscripten/system/include/libcxx/__bit_reference +27 -8
  41. data/modules/emscripten/system/include/libcxx/__config +62 -15
  42. data/modules/emscripten/system/include/libcxx/__debug +5 -1
  43. data/modules/emscripten/system/include/libcxx/__functional_03 +24 -24
  44. data/modules/emscripten/system/include/libcxx/__functional_base +22 -4
  45. data/modules/emscripten/system/include/libcxx/__hash_table +566 -54
  46. data/modules/emscripten/system/include/libcxx/__locale +11 -3
  47. data/modules/emscripten/system/include/libcxx/__split_buffer +6 -6
  48. data/modules/emscripten/system/include/libcxx/__std_stream +58 -30
  49. data/modules/emscripten/system/include/libcxx/__tree +58 -51
  50. data/modules/emscripten/system/include/libcxx/__tuple +9 -9
  51. data/modules/emscripten/system/include/libcxx/algorithm +223 -13
  52. data/modules/emscripten/system/include/libcxx/array +18 -17
  53. data/modules/emscripten/system/include/libcxx/atomic +15 -5
  54. data/modules/emscripten/system/include/libcxx/cctype +2 -2
  55. data/modules/emscripten/system/include/libcxx/chrono +131 -36
  56. data/modules/emscripten/system/include/libcxx/cmath +41 -36
  57. data/modules/emscripten/system/include/libcxx/complex +49 -49
  58. data/modules/emscripten/system/include/libcxx/cstdio +2 -2
  59. data/modules/emscripten/system/include/libcxx/cstdlib +5 -5
  60. data/modules/emscripten/system/include/libcxx/cstring +2 -2
  61. data/modules/emscripten/system/include/libcxx/cwchar +22 -13
  62. data/modules/emscripten/system/include/libcxx/deque +27 -14
  63. data/modules/emscripten/system/include/libcxx/forward_list +36 -35
  64. data/modules/emscripten/system/include/libcxx/fstream +16 -0
  65. data/modules/emscripten/system/include/libcxx/functional +348 -23
  66. data/modules/emscripten/system/include/libcxx/future +66 -0
  67. data/modules/emscripten/system/include/libcxx/ios +27 -0
  68. data/modules/emscripten/system/include/libcxx/istream +2 -4
  69. data/modules/emscripten/system/include/libcxx/iterator +17 -9
  70. data/modules/emscripten/system/include/libcxx/limits +2 -2
  71. data/modules/emscripten/system/include/libcxx/list +165 -105
  72. data/modules/emscripten/system/include/libcxx/locale +154 -43
  73. data/modules/emscripten/system/include/libcxx/map +165 -224
  74. data/modules/emscripten/system/include/libcxx/memory +113 -54
  75. data/modules/emscripten/system/include/libcxx/random +2 -29
  76. data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
  77. data/modules/emscripten/system/include/libcxx/regex +60 -15
  78. data/modules/emscripten/system/include/libcxx/sstream +124 -40
  79. data/modules/emscripten/system/include/libcxx/string +345 -182
  80. data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +3 -3
  81. data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -2
  82. data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +3 -3
  83. data/modules/emscripten/system/include/libcxx/support/win32/support.h +10 -11
  84. data/modules/emscripten/system/include/libcxx/thread +2 -2
  85. data/modules/emscripten/system/include/libcxx/tuple +134 -65
  86. data/modules/emscripten/system/include/libcxx/type_traits +232 -24
  87. data/modules/emscripten/system/include/libcxx/unordered_map +314 -161
  88. data/modules/emscripten/system/include/libcxx/unordered_set +160 -2
  89. data/modules/emscripten/system/include/libcxx/utility +225 -40
  90. data/modules/emscripten/system/include/libcxx/vector +52 -57
  91. data/modules/emscripten/system/include/net/if.h +20 -1
  92. data/modules/emscripten/system/include/net/netinet/in.h +69 -5
  93. data/modules/emscripten/system/include/netdb.h +36 -0
  94. data/modules/emscripten/system/include/sys/ioctl.h +55 -3
  95. data/modules/emscripten/system/include/sys/select.h +2 -0
  96. data/modules/emscripten/system/include/sys/sendfile.h +16 -0
  97. data/modules/emscripten/system/include/sys/socket.h +181 -35
  98. data/modules/emscripten/system/lib/dlmalloc.c +10 -12
  99. data/modules/emscripten/system/lib/libc/musl/src/stdlib/ecvt.c +19 -0
  100. data/modules/emscripten/system/lib/libc/musl/src/stdlib/fcvt.c +25 -0
  101. data/modules/emscripten/system/lib/libc/musl/src/stdlib/gcvt.c +8 -0
  102. data/modules/emscripten/system/lib/libcextra.symbols +3 -0
  103. data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +24 -0
  104. data/modules/emscripten/system/lib/libcxx/debug.cpp +11 -9
  105. data/modules/emscripten/system/lib/libcxx/exception.cpp +9 -0
  106. data/modules/emscripten/system/lib/libcxx/hash.cpp +6 -0
  107. data/modules/emscripten/system/lib/libcxx/iostream.cpp +4 -4
  108. data/modules/emscripten/system/lib/libcxx/locale.cpp +91 -42
  109. data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
  110. data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +1 -1
  111. data/modules/emscripten/system/lib/libcxx/string.cpp +332 -491
  112. data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +4 -2
  113. data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +140 -41
  114. data/modules/emscripten/system/lib/libcxx/symbols +9 -256
  115. data/modules/emscripten/system/lib/libcxx/system_error.cpp +3 -0
  116. data/modules/emscripten/system/lib/libcxx/thread.cpp +16 -3
  117. data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +12 -2
  118. data/modules/emscripten/third_party/stb_image.c +4673 -0
  119. data/modules/emscripten/tools/asm_module.py +273 -0
  120. data/modules/emscripten/tools/exec_llvm.py +2 -2
  121. data/modules/emscripten/tools/file_packager.py +36 -16
  122. data/modules/emscripten/tools/find_bigfuncs.py +9 -9
  123. data/modules/emscripten/tools/js-optimizer.js +485 -131
  124. data/modules/emscripten/tools/js_optimizer.py +22 -15
  125. data/modules/emscripten/tools/merge_asm.py +26 -0
  126. data/modules/emscripten/tools/nativize_llvm.py +2 -2
  127. data/modules/emscripten/tools/settings_template_readonly.py +1 -1
  128. data/modules/emscripten/tools/shared.py +63 -20
  129. data/modules/emscripten/tools/split_asm.py +30 -0
  130. data/modules/emscripten/tools/test-js-optimizer-asm-outline1-output.js +686 -0
  131. data/modules/emscripten/tools/test-js-optimizer-asm-outline1.js +263 -0
  132. data/modules/emscripten/tools/test-js-optimizer-asm-outline2-output.js +747 -0
  133. data/modules/emscripten/tools/{test-js-optimizer-asm-outline.js → test-js-optimizer-asm-outline2.js} +1 -1
  134. data/modules/emscripten/tools/test-js-optimizer-asm-outline3-output.js +28 -0
  135. data/modules/emscripten/tools/test-js-optimizer-asm-outline3.js +30 -0
  136. data/modules/emscripten/tools/test-js-optimizer-asm-pre-output.js +4 -4
  137. data/modules/mruby/AUTHORS +1 -0
  138. data/modules/mruby/README.md +4 -2
  139. data/modules/mruby/build_config.rb +6 -6
  140. data/modules/mruby/doc/mrbgems/README.md +4 -4
  141. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake +1 -1
  142. data/modules/mruby/examples/mrbgems/c_extension_example/mrbgem.rake +1 -1
  143. data/modules/mruby/examples/mrbgems/ruby_extension_example/mrbgem.rake +1 -1
  144. data/modules/mruby/include/mrbconf.h +3 -0
  145. data/modules/mruby/include/mruby/array.h +2 -2
  146. data/modules/mruby/include/mruby/class.h +4 -4
  147. data/modules/mruby/include/mruby/compile.h +1 -0
  148. data/modules/mruby/include/mruby/data.h +1 -1
  149. data/modules/mruby/include/mruby/hash.h +2 -2
  150. data/modules/mruby/include/mruby/irep.h +3 -2
  151. data/modules/mruby/include/mruby/proc.h +1 -1
  152. data/modules/mruby/include/mruby/range.h +1 -1
  153. data/modules/mruby/include/mruby/string.h +2 -2
  154. data/modules/mruby/include/mruby/value.h +43 -26
  155. data/modules/mruby/include/mruby.h +10 -2
  156. data/modules/mruby/minirake +2 -2
  157. data/modules/mruby/mrbgems/mruby-array-ext/mrbgem.rake +1 -1
  158. data/modules/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +4 -1
  159. data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +32 -0
  160. data/modules/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +1 -1
  161. data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +13 -5
  162. data/modules/mruby/mrbgems/mruby-enum-ext/mrbgem.rake +1 -1
  163. data/modules/mruby/mrbgems/mruby-enum-ext/test/enum.rb +10 -11
  164. data/modules/mruby/mrbgems/mruby-eval/mrbgem.rake +1 -1
  165. data/modules/mruby/mrbgems/mruby-exit/mrbgem.rake +4 -0
  166. data/modules/mruby/mrbgems/mruby-exit/src/mruby-exit.c +24 -0
  167. data/modules/mruby/mrbgems/mruby-fiber/mrbgem.rake +1 -1
  168. data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +4 -2
  169. data/modules/mruby/mrbgems/mruby-hash-ext/mrbgem.rake +1 -1
  170. data/modules/mruby/mrbgems/mruby-hash-ext/test/hash.rb +5 -7
  171. data/modules/mruby/mrbgems/mruby-math/mrbgem.rake +1 -1
  172. data/modules/mruby/mrbgems/mruby-numeric-ext/mrbgem.rake +1 -1
  173. data/modules/mruby/mrbgems/mruby-numeric-ext/test/numeric.rb +2 -2
  174. data/modules/mruby/mrbgems/mruby-object-ext/mrbgem.rake +1 -1
  175. data/modules/mruby/mrbgems/mruby-object-ext/src/object.c +3 -3
  176. data/modules/mruby/mrbgems/mruby-object-ext/test/nil.rb +3 -3
  177. data/modules/mruby/mrbgems/mruby-object-ext/test/object.rb +1 -1
  178. data/modules/mruby/mrbgems/mruby-objectspace/mrbgem.rake +1 -1
  179. data/modules/mruby/mrbgems/mruby-objectspace/test/objectspace.rb +36 -37
  180. data/modules/mruby/mrbgems/mruby-print/mrbgem.rake +1 -1
  181. data/modules/mruby/mrbgems/mruby-proc-ext/mrbgem.rake +1 -1
  182. data/modules/mruby/mrbgems/mruby-proc-ext/test/proc.rb +8 -8
  183. data/modules/mruby/mrbgems/mruby-random/mrbgem.rake +1 -1
  184. data/modules/mruby/mrbgems/mruby-range-ext/mrbgem.rake +1 -1
  185. data/modules/mruby/mrbgems/mruby-range-ext/test/range.rb +6 -6
  186. data/modules/mruby/mrbgems/mruby-sprintf/mrbgem.rake +1 -1
  187. data/modules/mruby/mrbgems/mruby-string-ext/mrbgem.rake +1 -1
  188. data/modules/mruby/mrbgems/mruby-string-ext/test/string.rb +6 -6
  189. data/modules/mruby/mrbgems/mruby-struct/mrbgem.rake +1 -1
  190. data/modules/mruby/mrbgems/mruby-symbol-ext/mrbgem.rake +1 -1
  191. data/modules/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +2 -2
  192. data/modules/mruby/mrbgems/mruby-time/mrbgem.rake +1 -1
  193. data/modules/mruby/mrbgems/mruby-time/src/time.c +2 -8
  194. data/modules/mruby/mrbgems/mruby-toplevel-ext/mrbgem.rake +1 -1
  195. data/modules/mruby/mrbgems/mruby-toplevel-ext/test/toplevel.rb +10 -10
  196. data/modules/mruby/mrblib/class.rb +15 -9
  197. data/modules/mruby/mrblib/string.rb +12 -0
  198. data/modules/mruby/src/array.c +4 -3
  199. data/modules/mruby/src/class.c +13 -8
  200. data/modules/mruby/src/codegen.c +9 -8
  201. data/modules/mruby/src/error.c +7 -5
  202. data/modules/mruby/src/error.h +1 -0
  203. data/modules/mruby/src/etc.c +1 -1
  204. data/modules/mruby/src/gc.c +163 -128
  205. data/modules/mruby/src/kernel.c +43 -15
  206. data/modules/mruby/src/numeric.c +9 -7
  207. data/modules/mruby/src/object.c +1 -1
  208. data/modules/mruby/src/parse.y +37 -19
  209. data/modules/mruby/src/range.c +10 -24
  210. data/modules/mruby/src/state.c +2 -6
  211. data/modules/mruby/src/string.c +0 -9
  212. data/modules/mruby/src/variable.c +2 -2
  213. data/modules/mruby/src/vm.c +12 -6
  214. data/modules/mruby/tasks/mrbgem_spec.rake +7 -0
  215. data/modules/mruby/tasks/mrbgems.rake +2 -1
  216. data/modules/mruby/tasks/mrbgems_test.rake +1 -1
  217. data/modules/mruby/tasks/mruby_build.rake +4 -3
  218. data/modules/mruby/tasks/mruby_build_commands.rake +6 -1
  219. data/modules/mruby/tasks/mruby_build_gem.rake +2 -2
  220. data/modules/mruby/tasks/toolchains/androideabi.rake +2 -0
  221. data/modules/mruby/test/assert.rb +2 -2
  222. data/modules/mruby/test/t/argumenterror.rb +3 -3
  223. data/modules/mruby/test/t/array.rb +55 -55
  224. data/modules/mruby/test/t/basicobject.rb +1 -1
  225. data/modules/mruby/test/t/bs_block.rb +12 -12
  226. data/modules/mruby/test/t/class.rb +21 -21
  227. data/modules/mruby/test/t/enumerable.rb +18 -18
  228. data/modules/mruby/test/t/exception.rb +20 -20
  229. data/modules/mruby/test/t/false.rb +3 -3
  230. data/modules/mruby/test/t/float.rb +40 -40
  231. data/modules/mruby/test/t/gc.rb +10 -10
  232. data/modules/mruby/test/t/hash.rb +41 -41
  233. data/modules/mruby/test/t/indexerror.rb +2 -2
  234. data/modules/mruby/test/t/integer.rb +41 -41
  235. data/modules/mruby/test/t/kernel.rb +33 -33
  236. data/modules/mruby/test/t/literals.rb +82 -82
  237. data/modules/mruby/test/t/localjumperror.rb +1 -1
  238. data/modules/mruby/test/t/module.rb +170 -31
  239. data/modules/mruby/test/t/nameerror.rb +5 -5
  240. data/modules/mruby/test/t/nil.rb +2 -2
  241. data/modules/mruby/test/t/nomethoderror.rb +1 -1
  242. data/modules/mruby/test/t/numeric.rb +5 -5
  243. data/modules/mruby/test/t/object.rb +2 -2
  244. data/modules/mruby/test/t/proc.rb +8 -8
  245. data/modules/mruby/test/t/range.rb +9 -9
  246. data/modules/mruby/test/t/rangeerror.rb +2 -2
  247. data/modules/mruby/test/t/runtimeerror.rb +1 -1
  248. data/modules/mruby/test/t/standarderror.rb +2 -2
  249. data/modules/mruby/test/t/string.rb +100 -100
  250. data/modules/mruby/test/t/symbol.rb +5 -5
  251. data/modules/mruby/test/t/syntax.rb +15 -6
  252. data/modules/mruby/test/t/true.rb +3 -3
  253. data/modules/mruby/test/t/typeerror.rb +2 -2
  254. data/modules/mruby/tools/mrbc/mrbc.c +10 -4
  255. data/modules/mruby/travis_config.rb +1 -0
  256. data/scripts/gen_gems_config.rb +5 -1
  257. metadata +19 -4
  258. data/modules/emscripten/tools/test-js-optimizer-asm-outline-output.js +0 -570
@@ -79,47 +79,47 @@ template <class _T1, class _T2> struct __tuple_like<pair<_T1, _T2> > : true_type
79
79
  template <class _Tp, size_t _Size> struct __tuple_like<array<_Tp, _Size> > : true_type {};
80
80
 
81
81
  template <size_t _Ip, class ..._Tp>
82
- _LIBCPP_INLINE_VISIBILITY
82
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
83
83
  typename tuple_element<_Ip, tuple<_Tp...> >::type&
84
84
  get(tuple<_Tp...>&) _NOEXCEPT;
85
85
 
86
86
  template <size_t _Ip, class ..._Tp>
87
- _LIBCPP_INLINE_VISIBILITY
87
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
88
88
  const typename tuple_element<_Ip, tuple<_Tp...> >::type&
89
89
  get(const tuple<_Tp...>&) _NOEXCEPT;
90
90
 
91
91
  template <size_t _Ip, class ..._Tp>
92
- _LIBCPP_INLINE_VISIBILITY
92
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
93
93
  typename tuple_element<_Ip, tuple<_Tp...> >::type&&
94
94
  get(tuple<_Tp...>&&) _NOEXCEPT;
95
95
 
96
96
  template <size_t _Ip, class _T1, class _T2>
97
- _LIBCPP_INLINE_VISIBILITY
97
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
98
98
  typename tuple_element<_Ip, pair<_T1, _T2> >::type&
99
99
  get(pair<_T1, _T2>&) _NOEXCEPT;
100
100
 
101
101
  template <size_t _Ip, class _T1, class _T2>
102
- _LIBCPP_INLINE_VISIBILITY
102
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
103
103
  const typename tuple_element<_Ip, pair<_T1, _T2> >::type&
104
104
  get(const pair<_T1, _T2>&) _NOEXCEPT;
105
105
 
106
106
  template <size_t _Ip, class _T1, class _T2>
107
- _LIBCPP_INLINE_VISIBILITY
107
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
108
108
  typename tuple_element<_Ip, pair<_T1, _T2> >::type&&
109
109
  get(pair<_T1, _T2>&&) _NOEXCEPT;
110
110
 
111
111
  template <size_t _Ip, class _Tp, size_t _Size>
112
- _LIBCPP_INLINE_VISIBILITY
112
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
113
113
  _Tp&
114
114
  get(array<_Tp, _Size>&) _NOEXCEPT;
115
115
 
116
116
  template <size_t _Ip, class _Tp, size_t _Size>
117
- _LIBCPP_INLINE_VISIBILITY
117
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
118
118
  const _Tp&
119
119
  get(const array<_Tp, _Size>&) _NOEXCEPT;
120
120
 
121
121
  template <size_t _Ip, class _Tp, size_t _Size>
122
- _LIBCPP_INLINE_VISIBILITY
122
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
123
123
  _Tp&&
124
124
  get(array<_Tp, _Size>&&) _NOEXCEPT;
125
125
 
@@ -87,30 +87,63 @@ template <class InputIterator1, class InputIterator2>
87
87
  pair<InputIterator1, InputIterator2>
88
88
  mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2);
89
89
 
90
+ template <class InputIterator1, class InputIterator2>
91
+ pair<InputIterator1, InputIterator2>
92
+ mismatch(InputIterator1 first1, InputIterator1 last1,
93
+ InputIterator2 first2, InputIterator2 last2); // **C++14**
94
+
90
95
  template <class InputIterator1, class InputIterator2, class BinaryPredicate>
91
96
  pair<InputIterator1, InputIterator2>
92
97
  mismatch(InputIterator1 first1, InputIterator1 last1,
93
98
  InputIterator2 first2, BinaryPredicate pred);
94
99
 
100
+ template <class InputIterator1, class InputIterator2, class BinaryPredicate>
101
+ pair<InputIterator1, InputIterator2>
102
+ mismatch(InputIterator1 first1, InputIterator1 last1,
103
+ InputIterator2 first2, InputIterator2 last2,
104
+ BinaryPredicate pred); // **C++14**
105
+
95
106
  template <class InputIterator1, class InputIterator2>
96
107
  bool
97
108
  equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2);
98
109
 
110
+ template <class InputIterator1, class InputIterator2>
111
+ bool
112
+ equal(InputIterator1 first1, InputIterator1 last1,
113
+ InputIterator2 first2, InputIterator2 last2); // **C++14**
114
+
99
115
  template <class InputIterator1, class InputIterator2, class BinaryPredicate>
100
116
  bool
101
117
  equal(InputIterator1 first1, InputIterator1 last1,
102
118
  InputIterator2 first2, BinaryPredicate pred);
103
119
 
120
+ template <class InputIterator1, class InputIterator2, class BinaryPredicate>
121
+ bool
122
+ equal(InputIterator1 first1, InputIterator1 last1,
123
+ InputIterator2 first2, InputIterator2 last2,
124
+ BinaryPredicate pred); // **C++14**
125
+
104
126
  template<class ForwardIterator1, class ForwardIterator2>
105
127
  bool
106
128
  is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
107
129
  ForwardIterator2 first2);
108
130
 
131
+ template<class ForwardIterator1, class ForwardIterator2>
132
+ bool
133
+ is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
134
+ ForwardIterator2 first2, ForwardIterator2 last2); // **C++14**
135
+
109
136
  template<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
110
137
  bool
111
138
  is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
112
139
  ForwardIterator2 first2, BinaryPredicate pred);
113
140
 
141
+ template<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
142
+ bool
143
+ is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
144
+ ForwardIterator2 first2, ForwardIterator2 last2,
145
+ BinaryPredicate pred); // **C++14**
146
+
114
147
  template <class ForwardIterator1, class ForwardIterator2>
115
148
  ForwardIterator1
116
149
  search(ForwardIterator1 first1, ForwardIterator1 last1,
@@ -1087,6 +1120,32 @@ mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __fi
1087
1120
  return _VSTD::mismatch(__first1, __last1, __first2, __equal_to<__v1, __v2>());
1088
1121
  }
1089
1122
 
1123
+ #if _LIBCPP_STD_VER > 11
1124
+ template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
1125
+ inline _LIBCPP_INLINE_VISIBILITY
1126
+ pair<_InputIterator1, _InputIterator2>
1127
+ mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
1128
+ _InputIterator2 __first2, _InputIterator2 __last2,
1129
+ _BinaryPredicate __pred)
1130
+ {
1131
+ for (; __first1 != __last1 && __first2 != __last2; ++__first1, ++__first2)
1132
+ if (!__pred(*__first1, *__first2))
1133
+ break;
1134
+ return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
1135
+ }
1136
+
1137
+ template <class _InputIterator1, class _InputIterator2>
1138
+ inline _LIBCPP_INLINE_VISIBILITY
1139
+ pair<_InputIterator1, _InputIterator2>
1140
+ mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
1141
+ _InputIterator2 __first2, _InputIterator2 __last2)
1142
+ {
1143
+ typedef typename iterator_traits<_InputIterator1>::value_type __v1;
1144
+ typedef typename iterator_traits<_InputIterator2>::value_type __v2;
1145
+ return _VSTD::mismatch(__first1, __last1, __first2, __last2, __equal_to<__v1, __v2>());
1146
+ }
1147
+ #endif
1148
+
1090
1149
  // equal
1091
1150
 
1092
1151
  template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
@@ -1110,6 +1169,60 @@ equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first
1110
1169
  return _VSTD::equal(__first1, __last1, __first2, __equal_to<__v1, __v2>());
1111
1170
  }
1112
1171
 
1172
+ #if _LIBCPP_STD_VER > 11
1173
+ template <class _BinaryPredicate, class _InputIterator1, class _InputIterator2>
1174
+ inline _LIBCPP_INLINE_VISIBILITY
1175
+ bool
1176
+ __equal(_InputIterator1 __first1, _InputIterator1 __last1,
1177
+ _InputIterator2 __first2, _InputIterator2 __last2, _BinaryPredicate __pred,
1178
+ input_iterator_tag, input_iterator_tag )
1179
+ {
1180
+ for (; __first1 != __last1 && __first2 != __last2; ++__first1, ++__first2)
1181
+ if (!__pred(*__first1, *__first2))
1182
+ return false;
1183
+ return __first1 == __last1 && __first2 == __last2;
1184
+ }
1185
+
1186
+ template <class _BinaryPredicate, class _RandomAccessIterator1, class _RandomAccessIterator2>
1187
+ inline _LIBCPP_INLINE_VISIBILITY
1188
+ bool
1189
+ __equal(_RandomAccessIterator1 __first1, _RandomAccessIterator1 __last1,
1190
+ _RandomAccessIterator2 __first2, _RandomAccessIterator2 __last2, _BinaryPredicate __pred,
1191
+ random_access_iterator_tag, random_access_iterator_tag )
1192
+ {
1193
+ if ( _VSTD::distance(__first1, __last1) != _VSTD::distance(__first2, __last2))
1194
+ return false;
1195
+ return _VSTD::equal<_RandomAccessIterator1, _RandomAccessIterator2,
1196
+ typename add_lvalue_reference<_BinaryPredicate>::type>
1197
+ (__first1, __last1, __first2, __pred );
1198
+ }
1199
+
1200
+ template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
1201
+ inline _LIBCPP_INLINE_VISIBILITY
1202
+ bool
1203
+ equal(_InputIterator1 __first1, _InputIterator1 __last1,
1204
+ _InputIterator2 __first2, _InputIterator2 __last2, _BinaryPredicate __pred )
1205
+ {
1206
+ return _VSTD::__equal<typename add_lvalue_reference<_BinaryPredicate>::type>
1207
+ (__first1, __last1, __first2, __last2, __pred,
1208
+ typename iterator_traits<_InputIterator1>::iterator_category(),
1209
+ typename iterator_traits<_InputIterator2>::iterator_category());
1210
+ }
1211
+
1212
+ template <class _InputIterator1, class _InputIterator2>
1213
+ inline _LIBCPP_INLINE_VISIBILITY
1214
+ bool
1215
+ equal(_InputIterator1 __first1, _InputIterator1 __last1,
1216
+ _InputIterator2 __first2, _InputIterator2 __last2)
1217
+ {
1218
+ typedef typename iterator_traits<_InputIterator1>::value_type __v1;
1219
+ typedef typename iterator_traits<_InputIterator2>::value_type __v2;
1220
+ return _VSTD::__equal(__first1, __last1, __first2, __last2, __equal_to<__v1, __v2>(),
1221
+ typename iterator_traits<_InputIterator1>::iterator_category(),
1222
+ typename iterator_traits<_InputIterator2>::iterator_category());
1223
+ }
1224
+ #endif
1225
+
1113
1226
  // is_permutation
1114
1227
 
1115
1228
  template<class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
@@ -1169,6 +1282,100 @@ is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
1169
1282
  return _VSTD::is_permutation(__first1, __last1, __first2, __equal_to<__v1, __v2>());
1170
1283
  }
1171
1284
 
1285
+ #if _LIBCPP_STD_VER > 11
1286
+ template<class _BinaryPredicate, class _ForwardIterator1, class _ForwardIterator2>
1287
+ bool
1288
+ __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
1289
+ _ForwardIterator2 __first2, _ForwardIterator2 __last2,
1290
+ _BinaryPredicate __pred,
1291
+ forward_iterator_tag, forward_iterator_tag )
1292
+ {
1293
+ // shorten sequences as much as possible by lopping of any equal parts
1294
+ for (; __first1 != __last1 && __first2 != __last2; ++__first1, ++__first2)
1295
+ if (!__pred(*__first1, *__first2))
1296
+ goto __not_done;
1297
+ return __first1 == __last1 && __first2 == __last2;
1298
+ __not_done:
1299
+ // __first1 != __last1 && __first2 != __last2 && *__first1 != *__first2
1300
+ typedef typename iterator_traits<_ForwardIterator1>::difference_type _D1;
1301
+ _D1 __l1 = _VSTD::distance(__first1, __last1);
1302
+
1303
+ typedef typename iterator_traits<_ForwardIterator2>::difference_type _D2;
1304
+ _D2 __l2 = _VSTD::distance(__first2, __last2);
1305
+ if (__l1 != __l2)
1306
+ return false;
1307
+
1308
+ // For each element in [f1, l1) see if there are the same number of
1309
+ // equal elements in [f2, l2)
1310
+ for (_ForwardIterator1 __i = __first1; __i != __last1; ++__i)
1311
+ {
1312
+ // Have we already counted the number of *__i in [f1, l1)?
1313
+ for (_ForwardIterator1 __j = __first1; __j != __i; ++__j)
1314
+ if (__pred(*__j, *__i))
1315
+ goto __next_iter;
1316
+ {
1317
+ // Count number of *__i in [f2, l2)
1318
+ _D1 __c2 = 0;
1319
+ for (_ForwardIterator2 __j = __first2; __j != __last2; ++__j)
1320
+ if (__pred(*__i, *__j))
1321
+ ++__c2;
1322
+ if (__c2 == 0)
1323
+ return false;
1324
+ // Count number of *__i in [__i, l1) (we can start with 1)
1325
+ _D1 __c1 = 1;
1326
+ for (_ForwardIterator1 __j = _VSTD::next(__i); __j != __last1; ++__j)
1327
+ if (__pred(*__i, *__j))
1328
+ ++__c1;
1329
+ if (__c1 != __c2)
1330
+ return false;
1331
+ }
1332
+ __next_iter:;
1333
+ }
1334
+ return true;
1335
+ }
1336
+
1337
+ template<class _BinaryPredicate, class _RandomAccessIterator1, class _RandomAccessIterator2>
1338
+ bool
1339
+ __is_permutation(_RandomAccessIterator1 __first1, _RandomAccessIterator2 __last1,
1340
+ _RandomAccessIterator1 __first2, _RandomAccessIterator2 __last2,
1341
+ _BinaryPredicate __pred,
1342
+ random_access_iterator_tag, random_access_iterator_tag )
1343
+ {
1344
+ if ( _VSTD::distance(__first1, __last1) != _VSTD::distance(__first2, __last2))
1345
+ return false;
1346
+ return _VSTD::is_permutation<_RandomAccessIterator1, _RandomAccessIterator2,
1347
+ typename add_lvalue_reference<_BinaryPredicate>::type>
1348
+ (__first1, __last1, __first2, __pred );
1349
+ }
1350
+
1351
+ template<class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
1352
+ inline _LIBCPP_INLINE_VISIBILITY
1353
+ bool
1354
+ is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
1355
+ _ForwardIterator2 __first2, _ForwardIterator2 __last2,
1356
+ _BinaryPredicate __pred )
1357
+ {
1358
+ return _VSTD::__is_permutation<typename add_lvalue_reference<_BinaryPredicate>::type>
1359
+ (__first1, __last1, __first2, __last2, __pred,
1360
+ typename iterator_traits<_ForwardIterator1>::iterator_category(),
1361
+ typename iterator_traits<_ForwardIterator2>::iterator_category());
1362
+ }
1363
+
1364
+ template<class _ForwardIterator1, class _ForwardIterator2>
1365
+ inline _LIBCPP_INLINE_VISIBILITY
1366
+ bool
1367
+ is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
1368
+ _ForwardIterator2 __first2, _ForwardIterator2 __last2)
1369
+ {
1370
+ typedef typename iterator_traits<_ForwardIterator1>::value_type __v1;
1371
+ typedef typename iterator_traits<_ForwardIterator2>::value_type __v2;
1372
+ return _VSTD::__is_permutation(__first1, __last1, __first2, __last2,
1373
+ __equal_to<__v1, __v2>(),
1374
+ typename iterator_traits<_ForwardIterator1>::iterator_category(),
1375
+ typename iterator_traits<_ForwardIterator2>::iterator_category());
1376
+ }
1377
+ #endif
1378
+
1172
1379
  // search
1173
1380
 
1174
1381
  template <class _BinaryPredicate, class _ForwardIterator1, class _ForwardIterator2>
@@ -1398,7 +1605,7 @@ __search_n(_RandomAccessIterator __first, _RandomAccessIterator __last,
1398
1605
  // Find first element in sequence that matchs __value_, with a mininum of loop checks
1399
1606
  while (true)
1400
1607
  {
1401
- if (__first == __s) // return __last if no element matches __value_
1608
+ if (__first >= __s) // return __last if no element matches __value_
1402
1609
  return __last;
1403
1610
  if (__pred(*__first, __value_))
1404
1611
  break;
@@ -1780,17 +1987,23 @@ replace_copy_if(_InputIterator __first, _InputIterator __last, _OutputIterator _
1780
1987
  template <class _OutputIterator, class _Size, class _Tp>
1781
1988
  inline _LIBCPP_INLINE_VISIBILITY
1782
1989
  _OutputIterator
1783
- __fill_n(_OutputIterator __first, _Size __n, const _Tp& __value_, false_type)
1990
+ __fill_n(_OutputIterator __first, _Size __n, const _Tp& __value_)
1784
1991
  {
1785
1992
  for (; __n > 0; ++__first, --__n)
1786
1993
  *__first = __value_;
1787
1994
  return __first;
1788
1995
  }
1789
1996
 
1790
- template <class _OutputIterator, class _Size, class _Tp>
1997
+ template <class _Tp, class _Size, class _Up>
1791
1998
  inline _LIBCPP_INLINE_VISIBILITY
1792
- _OutputIterator
1793
- __fill_n(_OutputIterator __first, _Size __n, const _Tp& __value_, true_type)
1999
+ typename enable_if
2000
+ <
2001
+ is_integral<_Tp>::value && sizeof(_Tp) == 1 &&
2002
+ !is_same<_Tp, bool>::value &&
2003
+ is_integral<_Up>::value && sizeof(_Up) == 1,
2004
+ _Tp*
2005
+ >::type
2006
+ __fill_n(_Tp* __first, _Size __n,_Up __value_)
1794
2007
  {
1795
2008
  if (__n > 0)
1796
2009
  _VSTD::memset(__first, (unsigned char)__value_, (size_t)(__n));
@@ -1802,10 +2015,7 @@ inline _LIBCPP_INLINE_VISIBILITY
1802
2015
  _OutputIterator
1803
2016
  fill_n(_OutputIterator __first, _Size __n, const _Tp& __value_)
1804
2017
  {
1805
- return _VSTD::__fill_n(__first, __n, __value_, integral_constant<bool,
1806
- is_pointer<_OutputIterator>::value &&
1807
- is_trivially_copy_assignable<_Tp>::value &&
1808
- sizeof(_Tp) == 1>());
2018
+ return _VSTD::__fill_n(__first, __n, __value_);
1809
2019
  }
1810
2020
 
1811
2021
  // fill
@@ -3778,10 +3988,10 @@ sort(__wrap_iter<_Tp*> __first, __wrap_iter<_Tp*> __last, _Compare __comp)
3778
3988
  _VSTD::sort<_Tp*, _Comp_ref>(__first.base(), __last.base(), __comp);
3779
3989
  }
3780
3990
 
3781
- #ifdef _MSC_VER
3991
+ #ifdef _LIBCPP_MSVC
3782
3992
  #pragma warning( push )
3783
3993
  #pragma warning( disable: 4231)
3784
- #endif // _MSC_VER
3994
+ #endif // _LIBCPP_MSVC
3785
3995
  _LIBCPP_EXTERN_TEMPLATE(void __sort<__less<char>&, char*>(char*, char*, __less<char>&))
3786
3996
  _LIBCPP_EXTERN_TEMPLATE(void __sort<__less<wchar_t>&, wchar_t*>(wchar_t*, wchar_t*, __less<wchar_t>&))
3787
3997
  _LIBCPP_EXTERN_TEMPLATE(void __sort<__less<signed char>&, signed char*>(signed char*, signed char*, __less<signed char>&))
@@ -3815,9 +4025,9 @@ _LIBCPP_EXTERN_TEMPLATE(bool __insertion_sort_incomplete<__less<double>&, double
3815
4025
  _LIBCPP_EXTERN_TEMPLATE(bool __insertion_sort_incomplete<__less<long double>&, long double*>(long double*, long double*, __less<long double>&))
3816
4026
 
3817
4027
  _LIBCPP_EXTERN_TEMPLATE(unsigned __sort5<__less<long double>&, long double*>(long double*, long double*, long double*, long double*, long double*, __less<long double>&))
3818
- #ifdef _MSC_VER
4028
+ #ifdef _LIBCPP_MSVC
3819
4029
  #pragma warning( pop )
3820
- #endif // _MSC_VER
4030
+ #endif // _LIBCPP_MSVC
3821
4031
 
3822
4032
  // lower_bound
3823
4033
 
@@ -59,14 +59,14 @@ struct array
59
59
 
60
60
  // element access:
61
61
  reference operator[](size_type n);
62
- const_reference operator[](size_type n) const;
63
- const_reference at(size_type n) const;
62
+ const_reference operator[](size_type n) const; // constexpr in C++14
63
+ const_reference at(size_type n) const; // constexpr in C++14
64
64
  reference at(size_type n);
65
65
 
66
66
  reference front();
67
- const_reference front() const;
67
+ const_reference front() const; // constexpr in C++14
68
68
  reference back();
69
- const_reference back() const;
69
+ const_reference back() const; // constexpr in C++14
70
70
 
71
71
  T* data() noexcept;
72
72
  const T* data() const noexcept;
@@ -92,9 +92,9 @@ template <class T> class tuple_size;
92
92
  template <int I, class T> class tuple_element;
93
93
  template <class T, size_t N> struct tuple_size<array<T, N>>;
94
94
  template <int I, class T, size_t N> struct tuple_element<I, array<T, N>>;
95
- template <int I, class T, size_t N> T& get(array<T, N>&) noexcept;
96
- template <int I, class T, size_t N> const T& get(const array<T, N>&) noexcept;
97
- template <int I, class T, size_t N> T&& get(array<T, N>&&) noexcept;
95
+ template <int I, class T, size_t N> T& get(array<T, N>&) noexcept; // constexpr in C++14
96
+ template <int I, class T, size_t N> const T& get(const array<T, N>&) noexcept; // constexpr in C++14
97
+ template <int I, class T, size_t N> T&& get(array<T, N>&&) noexcept; // constexpr in C++14
98
98
 
99
99
  } // std
100
100
 
@@ -181,14 +181,14 @@ struct _LIBCPP_TYPE_VIS array
181
181
 
182
182
  // element access:
183
183
  _LIBCPP_INLINE_VISIBILITY reference operator[](size_type __n) {return __elems_[__n];}
184
- _LIBCPP_INLINE_VISIBILITY const_reference operator[](size_type __n) const {return __elems_[__n];}
184
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference operator[](size_type __n) const {return __elems_[__n];}
185
185
  reference at(size_type __n);
186
- const_reference at(size_type __n) const;
186
+ _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference at(size_type __n) const;
187
187
 
188
188
  _LIBCPP_INLINE_VISIBILITY reference front() {return __elems_[0];}
189
- _LIBCPP_INLINE_VISIBILITY const_reference front() const {return __elems_[0];}
189
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference front() const {return __elems_[0];}
190
190
  _LIBCPP_INLINE_VISIBILITY reference back() {return __elems_[_Size > 0 ? _Size-1 : 0];}
191
- _LIBCPP_INLINE_VISIBILITY const_reference back() const {return __elems_[_Size > 0 ? _Size-1 : 0];}
191
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 const_reference back() const {return __elems_[_Size > 0 ? _Size-1 : 0];}
192
192
 
193
193
  _LIBCPP_INLINE_VISIBILITY
194
194
  value_type* data() _NOEXCEPT {return __elems_;}
@@ -210,6 +210,7 @@ array<_Tp, _Size>::at(size_type __n)
210
210
  }
211
211
 
212
212
  template <class _Tp, size_t _Size>
213
+ _LIBCPP_CONSTEXPR_AFTER_CXX11
213
214
  typename array<_Tp, _Size>::const_reference
214
215
  array<_Tp, _Size>::at(size_type __n) const
215
216
  {
@@ -306,32 +307,32 @@ public:
306
307
  };
307
308
 
308
309
  template <size_t _Ip, class _Tp, size_t _Size>
309
- _LIBCPP_INLINE_VISIBILITY inline
310
+ _LIBCPP_INLINE_VISIBILITY inline _LIBCPP_CONSTEXPR_AFTER_CXX11
310
311
  _Tp&
311
312
  get(array<_Tp, _Size>& __a) _NOEXCEPT
312
313
  {
313
314
  static_assert(_Ip < _Size, "Index out of bounds in std::get<> (std::array)");
314
- return __a[_Ip];
315
+ return __a.__elems_[_Ip];
315
316
  }
316
317
 
317
318
  template <size_t _Ip, class _Tp, size_t _Size>
318
- _LIBCPP_INLINE_VISIBILITY inline
319
+ _LIBCPP_INLINE_VISIBILITY inline _LIBCPP_CONSTEXPR_AFTER_CXX11
319
320
  const _Tp&
320
321
  get(const array<_Tp, _Size>& __a) _NOEXCEPT
321
322
  {
322
323
  static_assert(_Ip < _Size, "Index out of bounds in std::get<> (const std::array)");
323
- return __a[_Ip];
324
+ return __a.__elems_[_Ip];
324
325
  }
325
326
 
326
327
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
327
328
 
328
329
  template <size_t _Ip, class _Tp, size_t _Size>
329
- _LIBCPP_INLINE_VISIBILITY inline
330
+ _LIBCPP_INLINE_VISIBILITY inline _LIBCPP_CONSTEXPR_AFTER_CXX11
330
331
  _Tp&&
331
332
  get(array<_Tp, _Size>&& __a) _NOEXCEPT
332
333
  {
333
334
  static_assert(_Ip < _Size, "Index out of bounds in std::get<> (std::array &&)");
334
- return _VSTD::move(__a[_Ip]);
335
+ return _VSTD::move(__a.__elems_[_Ip]);
335
336
  }
336
337
 
337
338
  #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
@@ -622,7 +622,12 @@ struct __atomic_base // false
622
622
  {return __c11_atomic_compare_exchange_strong(&__a_, &__e, __d, __m, __m);}
623
623
 
624
624
  _LIBCPP_INLINE_VISIBILITY
625
- __atomic_base() _NOEXCEPT {} // = default;
625
+ #ifndef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
626
+ __atomic_base() _NOEXCEPT = default;
627
+ #else
628
+ __atomic_base() _NOEXCEPT : __a_() {}
629
+ #endif // _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
630
+
626
631
  _LIBCPP_INLINE_VISIBILITY
627
632
  _LIBCPP_CONSTEXPR __atomic_base(_Tp __d) _NOEXCEPT : __a_(__d) {}
628
633
  #ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
@@ -645,7 +650,7 @@ struct __atomic_base<_Tp, true>
645
650
  {
646
651
  typedef __atomic_base<_Tp, false> __base;
647
652
  _LIBCPP_INLINE_VISIBILITY
648
- __atomic_base() _NOEXCEPT {} // = default;
653
+ __atomic_base() _NOEXCEPT _LIBCPP_DEFAULT
649
654
  _LIBCPP_INLINE_VISIBILITY
650
655
  _LIBCPP_CONSTEXPR __atomic_base(_Tp __d) _NOEXCEPT : __base(__d) {}
651
656
 
@@ -726,7 +731,7 @@ struct atomic
726
731
  {
727
732
  typedef __atomic_base<_Tp> __base;
728
733
  _LIBCPP_INLINE_VISIBILITY
729
- atomic() _NOEXCEPT {} // = default;
734
+ atomic() _NOEXCEPT _LIBCPP_DEFAULT
730
735
  _LIBCPP_INLINE_VISIBILITY
731
736
  _LIBCPP_CONSTEXPR atomic(_Tp __d) _NOEXCEPT : __base(__d) {}
732
737
 
@@ -746,7 +751,7 @@ struct atomic<_Tp*>
746
751
  {
747
752
  typedef __atomic_base<_Tp*> __base;
748
753
  _LIBCPP_INLINE_VISIBILITY
749
- atomic() _NOEXCEPT {} // = default;
754
+ atomic() _NOEXCEPT _LIBCPP_DEFAULT
750
755
  _LIBCPP_INLINE_VISIBILITY
751
756
  _LIBCPP_CONSTEXPR atomic(_Tp* __d) _NOEXCEPT : __base(__d) {}
752
757
 
@@ -1367,7 +1372,12 @@ typedef struct atomic_flag
1367
1372
  {__c11_atomic_store(&__a_, false, __m);}
1368
1373
 
1369
1374
  _LIBCPP_INLINE_VISIBILITY
1370
- atomic_flag() _NOEXCEPT {} // = default;
1375
+ #ifndef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
1376
+ atomic_flag() _NOEXCEPT = default;
1377
+ #else
1378
+ atomic_flag() _NOEXCEPT : __a_() {}
1379
+ #endif // _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
1380
+
1371
1381
  _LIBCPP_INLINE_VISIBILITY
1372
1382
  atomic_flag(bool __b) _NOEXCEPT : __a_(__b) {}
1373
1383
 
@@ -37,9 +37,9 @@ int toupper(int c);
37
37
 
38
38
  #include <__config>
39
39
  #include <ctype.h>
40
- #if defined(_MSC_VER)
40
+ #if defined(_LIBCPP_MSVCRT)
41
41
  #include "support/win32/support.h"
42
- #endif // _MSC_VER
42
+ #endif // _LIBCPP_MSVCRT
43
43
 
44
44
  #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
45
45
  #pragma GCC system_header