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
@@ -11,8 +11,8 @@
11
11
  #ifndef _LIBCPP_SUPPORT_WIN32_LIMITS_WIN32_H
12
12
  #define _LIBCPP_SUPPORT_WIN32_LIMITS_WIN32_H
13
13
 
14
- #if !defined(_MSC_VER)
15
- #error "This header is MSVC specific, Clang and GCC should not include it"
14
+ #if !defined(_LIBCPP_MSVCRT)
15
+ #error "This header complements Microsoft's C Runtime library, and should not be included otherwise."
16
16
  #else
17
17
 
18
18
  #ifndef NOMINMAX
@@ -74,6 +74,6 @@
74
74
  #define __builtin_nansf(__dummy) _FSnan._Float
75
75
  #define __builtin_nansl(__dummy) _LSnan._Long_double
76
76
 
77
- #endif // _MSC_VER
77
+ #endif // _LIBCPP_MSVCRT
78
78
 
79
79
  #endif // _LIBCPP_SUPPORT_WIN32_LIMITS_WIN32_H
@@ -65,8 +65,21 @@ decltype(MB_CUR_MAX) MB_CUR_MAX_L( locale_t __l )
65
65
  #define strtoull_l _strtoui64_l
66
66
  // FIXME: current msvcrt does not know about long double
67
67
  #define strtold_l _strtod_l
68
- #define islower_l _islower_l
69
- #define isupper_l _isupper_l
68
+
69
+ inline _LIBCPP_INLINE_VISIBILITY
70
+ int
71
+ islower_l(int c, _locale_t loc)
72
+ {
73
+ return _islower_l((int)c, loc);
74
+ }
75
+
76
+ inline _LIBCPP_INLINE_VISIBILITY
77
+ int
78
+ isupper_l(int c, _locale_t loc)
79
+ {
80
+ return _isupper_l((int)c, loc);
81
+ }
82
+
70
83
  #define isdigit_l _isdigit_l
71
84
  #define isxdigit_l _isxdigit_l
72
85
  #define strcoll_l _strcoll_l
@@ -11,8 +11,8 @@
11
11
  #ifndef _LIBCPP_SUPPORT_WIN32_MATH_WIN32_H
12
12
  #define _LIBCPP_SUPPORT_WIN32_MATH_WIN32_H
13
13
 
14
- #if !defined(_MSC_VER)
15
- #error "This header is MSVC specific, Clang and GCC should not include it"
14
+ #if !defined(_LIBCPP_MSVCRT)
15
+ #error "This header complements Microsoft's C Runtime library, and should not be included otherwise."
16
16
  #else
17
17
 
18
18
  #include <math.h>
@@ -108,6 +108,6 @@ _LIBCPP_ALWAYS_INLINE int fpclassify( double num )
108
108
  return _fpclass(num);
109
109
  }
110
110
 
111
- #endif // _MSC_VER
111
+ #endif // _LIBCPP_MSVCRT
112
112
 
113
113
  #endif // _LIBCPP_SUPPORT_WIN32_MATH_WIN32_H
@@ -15,26 +15,23 @@
15
15
  Functions and constants used in libc++ that are missing from the Windows C library.
16
16
  */
17
17
 
18
- #include <__config>
19
- #include <wchar.h> // mbstate_t
20
- #include <stdio.h> // _snwprintf
18
+ #include <cwchar> // mbstate_t
19
+ #include <cstdarg> // va_ macros
21
20
  #define swprintf _snwprintf
22
21
  #define vswprintf _vsnwprintf
23
- #define vfscnaf fscanf
24
22
 
25
- int vasprintf( char **sptr, const char *__restrict fmt , va_list ap );
26
- int asprintf( char **sptr, const char *__restrict fmt, ...);
27
- //int vfscanf( FILE *__restrict stream, const char *__restrict format,
28
- // va_list arg);
23
+ extern "C" {
29
24
 
25
+ int vasprintf( char **sptr, const char *__restrict fmt, va_list ap );
26
+ int asprintf( char **sptr, const char *__restrict fmt, ...);
30
27
  size_t mbsnrtowcs( wchar_t *__restrict dst, const char **__restrict src,
31
28
  size_t nmc, size_t len, mbstate_t *__restrict ps );
32
29
  size_t wcsnrtombs( char *__restrict dst, const wchar_t **__restrict src,
33
30
  size_t nwc, size_t len, mbstate_t *__restrict ps );
31
+ }
34
32
 
35
- #if defined(_MSC_VER)
33
+ #if defined(_LIBCPP_MSVCRT)
36
34
  #define snprintf _snprintf
37
-
38
35
  #include <xlocinfo.h>
39
36
  #define atoll _atoi64
40
37
  #define strtoll _strtoi64
@@ -85,9 +82,11 @@ _LIBCPP_ALWAYS_INLINE int __builtin_ctz( unsigned int x )
85
82
  _BitScanReverse(&r, x);
86
83
  return static_cast<int>(r);
87
84
  }
85
+
88
86
  // sizeof(long) == sizeof(int) on Windows
89
87
  _LIBCPP_ALWAYS_INLINE int __builtin_ctzl( unsigned long x )
90
88
  { return __builtin_ctz( static_cast<int>(x) ); }
89
+
91
90
  _LIBCPP_ALWAYS_INLINE int __builtin_ctzll( unsigned long long x )
92
91
  {
93
92
  DWORD r = 0;
@@ -110,6 +109,6 @@ _LIBCPP_ALWAYS_INLINE int __builtin_clzll( unsigned long long x )
110
109
  return static_cast<int>(r);
111
110
  }
112
111
  #endif // !__clang__
113
- #endif // _MSC_VER
112
+ #endif // _LIBCPP_MSVCRT
114
113
 
115
114
  #endif // _LIBCPP_SUPPORT_WIN32_SUPPORT_H
@@ -328,7 +328,7 @@ __thread_specific_ptr<__thread_struct>& __thread_local_data();
328
328
  template <class _Fp, class ..._Args, size_t ..._Indices>
329
329
  inline _LIBCPP_INLINE_VISIBILITY
330
330
  void
331
- __threaad_execute(tuple<_Fp, _Args...>& __t, __tuple_indices<_Indices...>)
331
+ __thread_execute(tuple<_Fp, _Args...>& __t, __tuple_indices<_Indices...>)
332
332
  {
333
333
  __invoke(_VSTD::move(_VSTD::get<0>(__t)), _VSTD::move(_VSTD::get<_Indices>(__t))...);
334
334
  }
@@ -340,7 +340,7 @@ __thread_proxy(void* __vp)
340
340
  __thread_local_data().reset(new __thread_struct);
341
341
  std::unique_ptr<_Fp> __p(static_cast<_Fp*>(__vp));
342
342
  typedef typename __make_tuple_indices<tuple_size<_Fp>::value, 1>::type _Index;
343
- __threaad_execute(*__p, _Index());
343
+ __thread_execute(*__p, _Index());
344
344
  return nullptr;
345
345
  }
346
346
 
@@ -21,19 +21,19 @@ template <class... T>
21
21
  class tuple {
22
22
  public:
23
23
  constexpr tuple();
24
- explicit tuple(const T&...);
24
+ explicit tuple(const T&...); // constexpr in C++14
25
25
  template <class... U>
26
- explicit tuple(U&&...);
26
+ explicit tuple(U&&...); // constexpr in C++14
27
27
  tuple(const tuple&) = default;
28
28
  tuple(tuple&&) = default;
29
29
  template <class... U>
30
- tuple(const tuple<U...>&);
30
+ tuple(const tuple<U...>&); // constexpr in C++14
31
31
  template <class... U>
32
- tuple(tuple<U...>&&);
32
+ tuple(tuple<U...>&&); // constexpr in C++14
33
33
  template <class U1, class U2>
34
- tuple(const pair<U1, U2>&); // iff sizeof...(T) == 2
34
+ tuple(const pair<U1, U2>&); // iff sizeof...(T) == 2 // constexpr in C++14
35
35
  template <class U1, class U2>
36
- tuple(pair<U1, U2>&&); // iff sizeof...(T) == 2
36
+ tuple(pair<U1, U2>&&); // iff sizeof...(T) == 2 // constexpr in C++14
37
37
 
38
38
  // allocator-extended constructors
39
39
  template <class Alloc>
@@ -72,10 +72,10 @@ public:
72
72
 
73
73
  const unspecified ignore;
74
74
 
75
- template <class... T> tuple<V...> make_tuple(T&&...);
75
+ template <class... T> tuple<V...> make_tuple(T&&...); // constexpr in C++14
76
76
  template <class... T> tuple<ATypes...> forward_as_tuple(T&&...) noexcept;
77
77
  template <class... T> tuple<T&...> tie(T&...) noexcept;
78
- template <class... Tuples> tuple<CTypes...> tuple_cat(Tuples&&... tpls);
78
+ template <class... Tuples> tuple<CTypes...> tuple_cat(Tuples&&... tpls); // constexpr in C++14
79
79
 
80
80
  // 20.4.1.4, tuple helper classes:
81
81
  template <class T> class tuple_size; // undefined
@@ -86,21 +86,28 @@ template <intsize_t I, class... T> class tuple_element<I, tuple<T...>>;
86
86
  // 20.4.1.5, element access:
87
87
  template <intsize_t I, class... T>
88
88
  typename tuple_element<I, tuple<T...>>::type&
89
- get(tuple<T...>&) noexcept;
89
+ get(tuple<T...>&) noexcept; // constexpr in C++14
90
90
  template <intsize_t I, class... T>
91
91
  typename tuple_element<I, tuple<T...>>::type const&
92
- get(const tuple<T...>&) noexcept;
92
+ get(const tuple<T...>&) noexcept; // constexpr in C++14
93
93
  template <intsize_t I, class... T>
94
94
  typename tuple_element<I, tuple<T...>>::type&&
95
- get(tuple<T...>&&) noexcept;
95
+ get(tuple<T...>&&) noexcept; // constexpr in C++14
96
+
97
+ template <class T1, class... T>
98
+ constexpr T1& get(tuple<T...>&) noexcept; // C++14
99
+ template <class T1, class... T>
100
+ constexpr T1 const& get(const tuple<T...>&) noexcept; // C++14
101
+ template <class T1, class... T>
102
+ constexpr T1&& get(tuple<T...>&&) noexcept; // C++14
96
103
 
97
104
  // 20.4.1.6, relational operators:
98
- template<class... T, class... U> bool operator==(const tuple<T...>&, const tuple<U...>&);
99
- template<class... T, class... U> bool operator<(const tuple<T...>&, const tuple<U...>&);
100
- template<class... T, class... U> bool operator!=(const tuple<T...>&, const tuple<U...>&);
101
- template<class... T, class... U> bool operator>(const tuple<T...>&, const tuple<U...>&);
102
- template<class... T, class... U> bool operator<=(const tuple<T...>&, const tuple<U...>&);
103
- template<class... T, class... U> bool operator>=(const tuple<T...>&, const tuple<U...>&);
105
+ template<class... T, class... U> bool operator==(const tuple<T...>&, const tuple<U...>&); // constexpr in C++14
106
+ template<class... T, class... U> bool operator<(const tuple<T...>&, const tuple<U...>&); // constexpr in C++14
107
+ template<class... T, class... U> bool operator!=(const tuple<T...>&, const tuple<U...>&); // constexpr in C++14
108
+ template<class... T, class... U> bool operator>(const tuple<T...>&, const tuple<U...>&); // constexpr in C++14
109
+ template<class... T, class... U> bool operator<=(const tuple<T...>&, const tuple<U...>&); // constexpr in C++14
110
+ template<class... T, class... U> bool operator>=(const tuple<T...>&, const tuple<U...>&); // constexpr in C++14
104
111
 
105
112
  template <class... Types, class Alloc>
106
113
  struct uses_allocator<tuple<Types...>, Alloc>;
@@ -259,7 +266,7 @@ public:
259
266
 
260
267
  template <class _Tp,
261
268
  class = typename enable_if<is_constructible<_Hp, _Tp>::value>::type>
262
- _LIBCPP_INLINE_VISIBILITY
269
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
263
270
  explicit __tuple_leaf(_Tp&& __t) _NOEXCEPT_((is_nothrow_constructible<_Hp, _Tp>::value))
264
271
  : value(_VSTD::forward<_Tp>(__t))
265
272
  {static_assert(!is_reference<_Hp>::value ||
@@ -316,15 +323,17 @@ public:
316
323
  >::value)),
317
324
  "Attempted to construct a reference element in a tuple with an rvalue");}
318
325
 
326
+ _LIBCPP_INLINE_VISIBILITY
327
+ _LIBCPP_CONSTEXPR_AFTER_CXX11
319
328
  __tuple_leaf(const __tuple_leaf& __t) _NOEXCEPT_(is_nothrow_copy_constructible<_Hp>::value)
320
329
  : value(__t.get())
321
330
  {static_assert(!is_rvalue_reference<_Hp>::value, "Can not copy a tuple with rvalue reference member");}
322
331
 
323
- template <class _Tp>
324
- _LIBCPP_INLINE_VISIBILITY
325
- explicit __tuple_leaf(const __tuple_leaf<_Ip, _Tp>& __t)
326
- _NOEXCEPT_((is_nothrow_constructible<_Hp, const _Tp&>::value))
327
- : value(__t.get()) {}
332
+ _LIBCPP_INLINE_VISIBILITY
333
+ _LIBCPP_CONSTEXPR_AFTER_CXX11
334
+ __tuple_leaf(__tuple_leaf&& __t) _NOEXCEPT_(is_nothrow_move_constructible<_Hp>::value)
335
+ : value(_VSTD::move(__t.get()))
336
+ {}
328
337
 
329
338
  template <class _Tp>
330
339
  _LIBCPP_INLINE_VISIBILITY
@@ -342,8 +351,8 @@ public:
342
351
  return 0;
343
352
  }
344
353
 
345
- _LIBCPP_INLINE_VISIBILITY _Hp& get() _NOEXCEPT {return value;}
346
- _LIBCPP_INLINE_VISIBILITY const _Hp& get() const _NOEXCEPT {return value;}
354
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 _Hp& get() _NOEXCEPT {return value;}
355
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 const _Hp& get() const _NOEXCEPT {return value;}
347
356
  };
348
357
 
349
358
  template <size_t _Ip, class _Hp>
@@ -372,7 +381,7 @@ public:
372
381
 
373
382
  template <class _Tp,
374
383
  class = typename enable_if<is_constructible<_Hp, _Tp>::value>::type>
375
- _LIBCPP_INLINE_VISIBILITY
384
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
376
385
  explicit __tuple_leaf(_Tp&& __t) _NOEXCEPT_((is_nothrow_constructible<_Hp, _Tp>::value))
377
386
  : _Hp(_VSTD::forward<_Tp>(__t)) {}
378
387
 
@@ -391,12 +400,6 @@ public:
391
400
  explicit __tuple_leaf(integral_constant<int, 2>, const _Alloc& __a, _Tp&& __t)
392
401
  : _Hp(_VSTD::forward<_Tp>(__t), __a) {}
393
402
 
394
- template <class _Tp>
395
- _LIBCPP_INLINE_VISIBILITY
396
- explicit __tuple_leaf(const __tuple_leaf<_Ip, _Tp>& __t)
397
- _NOEXCEPT_((is_nothrow_constructible<_Hp, const _Tp&>::value))
398
- : _Hp(__t.get()) {}
399
-
400
403
  template <class _Tp>
401
404
  _LIBCPP_INLINE_VISIBILITY
402
405
  __tuple_leaf&
@@ -414,8 +417,8 @@ public:
414
417
  return 0;
415
418
  }
416
419
 
417
- _LIBCPP_INLINE_VISIBILITY _Hp& get() _NOEXCEPT {return static_cast<_Hp&>(*this);}
418
- _LIBCPP_INLINE_VISIBILITY const _Hp& get() const _NOEXCEPT {return static_cast<const _Hp&>(*this);}
420
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 _Hp& get() _NOEXCEPT {return static_cast<_Hp&>(*this);}
421
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 const _Hp& get() const _NOEXCEPT {return static_cast<const _Hp&>(*this);}
419
422
  };
420
423
 
421
424
  template <class ..._Tp>
@@ -450,7 +453,7 @@ struct __tuple_impl<__tuple_indices<_Indx...>, _Tp...>
450
453
 
451
454
  template <size_t ..._Uf, class ..._Tf,
452
455
  size_t ..._Ul, class ..._Tl, class ..._Up>
453
- _LIBCPP_INLINE_VISIBILITY
456
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
454
457
  explicit
455
458
  __tuple_impl(__tuple_indices<_Uf...>, __tuple_types<_Tf...>,
456
459
  __tuple_indices<_Ul...>, __tuple_types<_Tl...>,
@@ -477,10 +480,10 @@ struct __tuple_impl<__tuple_indices<_Indx...>, _Tp...>
477
480
  template <class _Tuple,
478
481
  class = typename enable_if
479
482
  <
480
- __tuple_convertible<_Tuple, tuple<_Tp...> >::value
483
+ __tuple_constructible<_Tuple, tuple<_Tp...> >::value
481
484
  >::type
482
485
  >
483
- _LIBCPP_INLINE_VISIBILITY
486
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
484
487
  __tuple_impl(_Tuple&& __t) _NOEXCEPT_((__all<is_nothrow_constructible<_Tp, typename tuple_element<_Indx,
485
488
  typename __make_tuple_types<_Tuple>::type>::type>::value...>::value))
486
489
  : __tuple_leaf<_Indx, _Tp>(_VSTD::forward<typename tuple_element<_Indx,
@@ -539,11 +542,11 @@ class _LIBCPP_TYPE_VIS tuple
539
542
 
540
543
  base base_;
541
544
 
542
- template <size_t _Jp, class ..._Up> friend
545
+ template <size_t _Jp, class ..._Up> friend _LIBCPP_CONSTEXPR_AFTER_CXX11
543
546
  typename tuple_element<_Jp, tuple<_Up...> >::type& get(tuple<_Up...>&) _NOEXCEPT;
544
- template <size_t _Jp, class ..._Up> friend
547
+ template <size_t _Jp, class ..._Up> friend _LIBCPP_CONSTEXPR_AFTER_CXX11
545
548
  const typename tuple_element<_Jp, tuple<_Up...> >::type& get(const tuple<_Up...>&) _NOEXCEPT;
546
- template <size_t _Jp, class ..._Up> friend
549
+ template <size_t _Jp, class ..._Up> friend _LIBCPP_CONSTEXPR_AFTER_CXX11
547
550
  typename tuple_element<_Jp, tuple<_Up...> >::type&& get(tuple<_Up...>&&) _NOEXCEPT;
548
551
  public:
549
552
 
@@ -551,7 +554,7 @@ public:
551
554
  _LIBCPP_CONSTEXPR tuple()
552
555
  _NOEXCEPT_(__all<is_nothrow_default_constructible<_Tp>::value...>::value) {}
553
556
 
554
- _LIBCPP_INLINE_VISIBILITY
557
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
555
558
  explicit tuple(const _Tp& ... __t) _NOEXCEPT_((__all<is_nothrow_copy_constructible<_Tp>::value...>::value))
556
559
  : base_(typename __make_tuple_indices<sizeof...(_Tp)>::type(),
557
560
  typename __make_tuple_types<tuple, sizeof...(_Tp)>::type(),
@@ -586,7 +589,7 @@ public:
586
589
  bool
587
590
  >::type = false
588
591
  >
589
- _LIBCPP_INLINE_VISIBILITY
592
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
590
593
  tuple(_Up&&... __u)
591
594
  _NOEXCEPT_((
592
595
  is_nothrow_constructible<
@@ -626,7 +629,7 @@ public:
626
629
  bool
627
630
  >::type =false
628
631
  >
629
- _LIBCPP_INLINE_VISIBILITY
632
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
630
633
  explicit
631
634
  tuple(_Up&&... __u)
632
635
  _NOEXCEPT_((
@@ -674,7 +677,7 @@ public:
674
677
  bool
675
678
  >::type = false
676
679
  >
677
- _LIBCPP_INLINE_VISIBILITY
680
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
678
681
  tuple(_Tuple&& __t) _NOEXCEPT_((is_nothrow_constructible<base, _Tuple>::value))
679
682
  : base_(_VSTD::forward<_Tuple>(__t)) {}
680
683
 
@@ -686,7 +689,7 @@ public:
686
689
  bool
687
690
  >::type = false
688
691
  >
689
- _LIBCPP_INLINE_VISIBILITY
692
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
690
693
  explicit
691
694
  tuple(_Tuple&& __t) _NOEXCEPT_((is_nothrow_constructible<base, _Tuple>::value))
692
695
  : base_(_VSTD::forward<_Tuple>(__t)) {}
@@ -756,7 +759,7 @@ swap(tuple<_Tp...>& __t, tuple<_Tp...>& __u)
756
759
  // get
757
760
 
758
761
  template <size_t _Ip, class ..._Tp>
759
- inline _LIBCPP_INLINE_VISIBILITY
762
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
760
763
  typename tuple_element<_Ip, tuple<_Tp...> >::type&
761
764
  get(tuple<_Tp...>& __t) _NOEXCEPT
762
765
  {
@@ -765,7 +768,7 @@ get(tuple<_Tp...>& __t) _NOEXCEPT
765
768
  }
766
769
 
767
770
  template <size_t _Ip, class ..._Tp>
768
- inline _LIBCPP_INLINE_VISIBILITY
771
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
769
772
  const typename tuple_element<_Ip, tuple<_Tp...> >::type&
770
773
  get(const tuple<_Tp...>& __t) _NOEXCEPT
771
774
  {
@@ -774,7 +777,7 @@ get(const tuple<_Tp...>& __t) _NOEXCEPT
774
777
  }
775
778
 
776
779
  template <size_t _Ip, class ..._Tp>
777
- inline _LIBCPP_INLINE_VISIBILITY
780
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
778
781
  typename tuple_element<_Ip, tuple<_Tp...> >::type&&
779
782
  get(tuple<_Tp...>&& __t) _NOEXCEPT
780
783
  {
@@ -783,6 +786,64 @@ get(tuple<_Tp...>&& __t) _NOEXCEPT
783
786
  static_cast<__tuple_leaf<_Ip, type>&&>(__t.base_).get());
784
787
  }
785
788
 
789
+ #if _LIBCPP_STD_VER > 11
790
+ // get by type
791
+ template <typename _T1, size_t _Idx, typename... _Args>
792
+ struct __find_exactly_one_t_helper;
793
+
794
+ // -- find exactly one
795
+ template <typename _T1, size_t _Idx, typename... _Args>
796
+ struct __find_exactly_one_t_checker {
797
+ static constexpr size_t value = _Idx;
798
+ // Check the rest of the list to make sure there's only one
799
+ static_assert ( __find_exactly_one_t_helper<_T1, 0, _Args...>::value == -1, "type can only occur once in type list" );
800
+ };
801
+
802
+
803
+ template <typename _T1, size_t _Idx>
804
+ struct __find_exactly_one_t_helper <_T1, _Idx> {
805
+ static constexpr size_t value = -1;
806
+ };
807
+
808
+ template <typename _T1, size_t _Idx, typename _Head, typename... _Args>
809
+ struct __find_exactly_one_t_helper <_T1, _Idx, _Head, _Args...> {
810
+ static constexpr size_t value =
811
+ std::conditional<
812
+ std::is_same<_T1, _Head>::value,
813
+ __find_exactly_one_t_checker<_T1, _Idx,   _Args...>,
814
+ __find_exactly_one_t_helper <_T1, _Idx+1, _Args...>
815
+ >::type::value;
816
+ };
817
+
818
+ template <typename _T1, typename... _Args>
819
+ struct __find_exactly_one_t {
820
+ static constexpr size_t value = __find_exactly_one_t_helper<_T1, 0, _Args...>::value;
821
+ static_assert ( value != -1, "type not found in type list" );
822
+ };
823
+
824
+ template <class _T1, class... _Args>
825
+ inline _LIBCPP_INLINE_VISIBILITY
826
+ constexpr _T1& get(tuple<_Args...>& __tup) noexcept
827
+ {
828
+ return _VSTD::get<__find_exactly_one_t<_T1, _Args...>::value>(__tup);
829
+ }
830
+
831
+ template <class _T1, class... _Args>
832
+ inline _LIBCPP_INLINE_VISIBILITY
833
+ constexpr _T1 const& get(tuple<_Args...> const& __tup) noexcept
834
+ {
835
+ return _VSTD::get<__find_exactly_one_t<_T1, _Args...>::value>(__tup);
836
+ }
837
+
838
+ template <class _T1, class... _Args>
839
+ inline _LIBCPP_INLINE_VISIBILITY
840
+ constexpr _T1&& get(tuple<_Args...>&& __tup) noexcept
841
+ {
842
+ return _VSTD::get<__find_exactly_one_t<_T1, _Args...>::value>(_VSTD::move(__tup));
843
+ }
844
+
845
+ #endif
846
+
786
847
  // tie
787
848
 
788
849
  template <class ..._Tp>
@@ -824,13 +885,21 @@ struct __make_tuple_return
824
885
  };
825
886
 
826
887
  template <class... _Tp>
827
- inline _LIBCPP_INLINE_VISIBILITY
888
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
828
889
  tuple<typename __make_tuple_return<_Tp>::type...>
829
890
  make_tuple(_Tp&&... __t)
830
891
  {
831
892
  return tuple<typename __make_tuple_return<_Tp>::type...>(_VSTD::forward<_Tp>(__t)...);
832
893
  }
833
894
 
895
+ template <class... _Tp>
896
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
897
+ tuple<_Tp&&...>
898
+ __forward_as_tuple(_Tp&&... __t) _NOEXCEPT
899
+ {
900
+ return tuple<_Tp&&...>(_VSTD::forward<_Tp>(__t)...);
901
+ }
902
+
834
903
  template <class... _Tp>
835
904
  inline _LIBCPP_INLINE_VISIBILITY
836
905
  tuple<_Tp&&...>
@@ -843,7 +912,7 @@ template <size_t _Ip>
843
912
  struct __tuple_equal
844
913
  {
845
914
  template <class _Tp, class _Up>
846
- _LIBCPP_INLINE_VISIBILITY
915
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
847
916
  bool operator()(const _Tp& __x, const _Up& __y)
848
917
  {
849
918
  return __tuple_equal<_Ip - 1>()(__x, __y) && get<_Ip-1>(__x) == get<_Ip-1>(__y);
@@ -854,7 +923,7 @@ template <>
854
923
  struct __tuple_equal<0>
855
924
  {
856
925
  template <class _Tp, class _Up>
857
- _LIBCPP_INLINE_VISIBILITY
926
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
858
927
  bool operator()(const _Tp&, const _Up&)
859
928
  {
860
929
  return true;
@@ -862,7 +931,7 @@ struct __tuple_equal<0>
862
931
  };
863
932
 
864
933
  template <class ..._Tp, class ..._Up>
865
- inline _LIBCPP_INLINE_VISIBILITY
934
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
866
935
  bool
867
936
  operator==(const tuple<_Tp...>& __x, const tuple<_Up...>& __y)
868
937
  {
@@ -870,7 +939,7 @@ operator==(const tuple<_Tp...>& __x, const tuple<_Up...>& __y)
870
939
  }
871
940
 
872
941
  template <class ..._Tp, class ..._Up>
873
- inline _LIBCPP_INLINE_VISIBILITY
942
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
874
943
  bool
875
944
  operator!=(const tuple<_Tp...>& __x, const tuple<_Up...>& __y)
876
945
  {
@@ -881,7 +950,7 @@ template <size_t _Ip>
881
950
  struct __tuple_less
882
951
  {
883
952
  template <class _Tp, class _Up>
884
- _LIBCPP_INLINE_VISIBILITY
953
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
885
954
  bool operator()(const _Tp& __x, const _Up& __y)
886
955
  {
887
956
  return __tuple_less<_Ip-1>()(__x, __y) ||
@@ -893,7 +962,7 @@ template <>
893
962
  struct __tuple_less<0>
894
963
  {
895
964
  template <class _Tp, class _Up>
896
- _LIBCPP_INLINE_VISIBILITY
965
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
897
966
  bool operator()(const _Tp&, const _Up&)
898
967
  {
899
968
  return false;
@@ -901,7 +970,7 @@ struct __tuple_less<0>
901
970
  };
902
971
 
903
972
  template <class ..._Tp, class ..._Up>
904
- inline _LIBCPP_INLINE_VISIBILITY
973
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
905
974
  bool
906
975
  operator<(const tuple<_Tp...>& __x, const tuple<_Up...>& __y)
907
976
  {
@@ -909,7 +978,7 @@ operator<(const tuple<_Tp...>& __x, const tuple<_Up...>& __y)
909
978
  }
910
979
 
911
980
  template <class ..._Tp, class ..._Up>
912
- inline _LIBCPP_INLINE_VISIBILITY
981
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
913
982
  bool
914
983
  operator>(const tuple<_Tp...>& __x, const tuple<_Up...>& __y)
915
984
  {
@@ -917,7 +986,7 @@ operator>(const tuple<_Tp...>& __x, const tuple<_Up...>& __y)
917
986
  }
918
987
 
919
988
  template <class ..._Tp, class ..._Up>
920
- inline _LIBCPP_INLINE_VISIBILITY
989
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
921
990
  bool
922
991
  operator>=(const tuple<_Tp...>& __x, const tuple<_Up...>& __y)
923
992
  {
@@ -925,7 +994,7 @@ operator>=(const tuple<_Tp...>& __x, const tuple<_Up...>& __y)
925
994
  }
926
995
 
927
996
  template <class ..._Tp, class ..._Up>
928
- inline _LIBCPP_INLINE_VISIBILITY
997
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
929
998
  bool
930
999
  operator<=(const tuple<_Tp...>& __x, const tuple<_Up...>& __y)
931
1000
  {
@@ -983,7 +1052,7 @@ struct __tuple_cat_return<>
983
1052
  typedef tuple<> type;
984
1053
  };
985
1054
 
986
- inline _LIBCPP_INLINE_VISIBILITY
1055
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
987
1056
  tuple<>
988
1057
  tuple_cat()
989
1058
  {
@@ -1030,16 +1099,16 @@ template <class ..._Types, size_t ..._I0, size_t ..._J0>
1030
1099
  struct __tuple_cat<tuple<_Types...>, __tuple_indices<_I0...>, __tuple_indices<_J0...> >
1031
1100
  {
1032
1101
  template <class _Tuple0>
1033
- _LIBCPP_INLINE_VISIBILITY
1102
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
1034
1103
  typename __tuple_cat_return_ref<tuple<_Types...>&&, _Tuple0&&>::type
1035
1104
  operator()(tuple<_Types...> __t, _Tuple0&& __t0)
1036
1105
  {
1037
- return _VSTD::forward_as_tuple(_VSTD::forward<_Types>(get<_I0>(__t))...,
1106
+ return __forward_as_tuple(_VSTD::forward<_Types>(get<_I0>(__t))...,
1038
1107
  get<_J0>(_VSTD::forward<_Tuple0>(__t0))...);
1039
1108
  }
1040
1109
 
1041
1110
  template <class _Tuple0, class _Tuple1, class ..._Tuples>
1042
- _LIBCPP_INLINE_VISIBILITY
1111
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
1043
1112
  typename __tuple_cat_return_ref<tuple<_Types...>&&, _Tuple0&&, _Tuple1&&, _Tuples&&...>::type
1044
1113
  operator()(tuple<_Types...> __t, _Tuple0&& __t0, _Tuple1&& __t1, _Tuples&& ...__tpls)
1045
1114
  {
@@ -1049,7 +1118,7 @@ struct __tuple_cat<tuple<_Types...>, __tuple_indices<_I0...>, __tuple_indices<_J
1049
1118
  tuple<_Types..., typename __apply_cv<_Tuple0, typename tuple_element<_J0, _T0>::type>::type&&...>,
1050
1119
  typename __make_tuple_indices<sizeof ...(_Types) + tuple_size<_T0>::value>::type,
1051
1120
  typename __make_tuple_indices<tuple_size<_T1>::value>::type>()
1052
- (_VSTD::forward_as_tuple(
1121
+ (__forward_as_tuple(
1053
1122
  _VSTD::forward<_Types>(get<_I0>(__t))...,
1054
1123
  get<_J0>(_VSTD::forward<_Tuple0>(__t0))...
1055
1124
  ),
@@ -1059,7 +1128,7 @@ struct __tuple_cat<tuple<_Types...>, __tuple_indices<_I0...>, __tuple_indices<_J
1059
1128
  };
1060
1129
 
1061
1130
  template <class _Tuple0, class... _Tuples>
1062
- inline _LIBCPP_INLINE_VISIBILITY
1131
+ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
1063
1132
  typename __tuple_cat_return<_Tuple0, _Tuples...>::type
1064
1133
  tuple_cat(_Tuple0&& __t0, _Tuples&&... __tpls)
1065
1134
  {