webruby 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -28,6 +28,7 @@ namespace std
28
28
 
29
29
  // Primary classification traits:
30
30
  template <class T> struct is_void;
31
+ template <class T> struct is_null_pointer; // C++14
31
32
  template <class T> struct is_integral;
32
33
  template <class T> struct is_floating_point;
33
34
  template <class T> struct is_array;
@@ -208,16 +209,16 @@ namespace std
208
209
  _LIBCPP_BEGIN_NAMESPACE_STD
209
210
 
210
211
  template <bool _Bp, class _If, class _Then>
211
- struct _LIBCPP_TYPE_VIS conditional {typedef _If type;};
212
+ struct _LIBCPP_TYPE_VIS_ONLY conditional {typedef _If type;};
212
213
  template <class _If, class _Then>
213
- struct _LIBCPP_TYPE_VIS conditional<false, _If, _Then> {typedef _Then type;};
214
+ struct _LIBCPP_TYPE_VIS_ONLY conditional<false, _If, _Then> {typedef _Then type;};
214
215
 
215
216
  #if _LIBCPP_STD_VER > 11
216
217
  template <bool _Bp, class _If, class _Then> using conditional_t = typename conditional<_Bp, _If, _Then>::type;
217
218
  #endif
218
219
 
219
- template <bool, class _Tp = void> struct _LIBCPP_TYPE_VIS enable_if {};
220
- template <class _Tp> struct _LIBCPP_TYPE_VIS enable_if<true, _Tp> {typedef _Tp type;};
220
+ template <bool, class _Tp = void> struct _LIBCPP_TYPE_VIS_ONLY enable_if {};
221
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY enable_if<true, _Tp> {typedef _Tp type;};
221
222
 
222
223
  #if _LIBCPP_STD_VER > 11
223
224
  template <bool _Bp, class _Tp = void> using enable_if_t = typename enable_if<_Bp, _Tp>::type;
@@ -229,7 +230,7 @@ struct __two {char __lx[2];};
229
230
  // helper class:
230
231
 
231
232
  template <class _Tp, _Tp __v>
232
- struct _LIBCPP_TYPE_VIS integral_constant
233
+ struct _LIBCPP_TYPE_VIS_ONLY integral_constant
233
234
  {
234
235
  static _LIBCPP_CONSTEXPR const _Tp value = __v;
235
236
  typedef _Tp value_type;
@@ -250,33 +251,33 @@ typedef integral_constant<bool, false> false_type;
250
251
 
251
252
  // is_const
252
253
 
253
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_const : public false_type {};
254
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_const<_Tp const> : public true_type {};
254
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_const : public false_type {};
255
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_const<_Tp const> : public true_type {};
255
256
 
256
257
  // is_volatile
257
258
 
258
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_volatile : public false_type {};
259
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_volatile<_Tp volatile> : public true_type {};
259
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_volatile : public false_type {};
260
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_volatile<_Tp volatile> : public true_type {};
260
261
 
261
262
  // remove_const
262
263
 
263
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_const {typedef _Tp type;};
264
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_const<const _Tp> {typedef _Tp type;};
264
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_const {typedef _Tp type;};
265
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_const<const _Tp> {typedef _Tp type;};
265
266
  #if _LIBCPP_STD_VER > 11
266
267
  template <class _Tp> using remove_const_t = typename remove_const<_Tp>::type;
267
268
  #endif
268
269
 
269
270
  // remove_volatile
270
271
 
271
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_volatile {typedef _Tp type;};
272
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_volatile<volatile _Tp> {typedef _Tp type;};
272
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_volatile {typedef _Tp type;};
273
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_volatile<volatile _Tp> {typedef _Tp type;};
273
274
  #if _LIBCPP_STD_VER > 11
274
275
  template <class _Tp> using remove_volatile_t = typename remove_volatile<_Tp>::type;
275
276
  #endif
276
277
 
277
278
  // remove_cv
278
279
 
279
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_cv
280
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_cv
280
281
  {typedef typename remove_volatile<typename remove_const<_Tp>::type>::type type;};
281
282
  #if _LIBCPP_STD_VER > 11
282
283
  template <class _Tp> using remove_cv_t = typename remove_cv<_Tp>::type;
@@ -287,7 +288,7 @@ template <class _Tp> using remove_cv_t = typename remove_cv<_Tp>::type;
287
288
  template <class _Tp> struct __is_void : public false_type {};
288
289
  template <> struct __is_void<void> : public true_type {};
289
290
 
290
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_void
291
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_void
291
292
  : public __is_void<typename remove_cv<_Tp>::type> {};
292
293
 
293
294
  // __is_nullptr_t
@@ -295,9 +296,14 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_void
295
296
  template <class _Tp> struct ____is_nullptr_t : public false_type {};
296
297
  template <> struct ____is_nullptr_t<nullptr_t> : public true_type {};
297
298
 
298
- template <class _Tp> struct _LIBCPP_TYPE_VIS __is_nullptr_t
299
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY __is_nullptr_t
299
300
  : public ____is_nullptr_t<typename remove_cv<_Tp>::type> {};
300
301
 
302
+ #if _LIBCPP_STD_VER > 11
303
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_null_pointer
304
+ : public ____is_nullptr_t<typename remove_cv<_Tp>::type> {};
305
+ #endif
306
+
301
307
  // is_integral
302
308
 
303
309
  template <class _Tp> struct __is_integral : public false_type {};
@@ -319,7 +325,7 @@ template <> struct __is_integral<unsigned long> : public true_type
319
325
  template <> struct __is_integral<long long> : public true_type {};
320
326
  template <> struct __is_integral<unsigned long long> : public true_type {};
321
327
 
322
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_integral
328
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_integral
323
329
  : public __is_integral<typename remove_cv<_Tp>::type> {};
324
330
 
325
331
  // is_floating_point
@@ -329,16 +335,16 @@ template <> struct __is_floating_point<float> : public true_type
329
335
  template <> struct __is_floating_point<double> : public true_type {};
330
336
  template <> struct __is_floating_point<long double> : public true_type {};
331
337
 
332
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_floating_point
338
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_floating_point
333
339
  : public __is_floating_point<typename remove_cv<_Tp>::type> {};
334
340
 
335
341
  // is_array
336
342
 
337
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_array
343
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_array
338
344
  : public false_type {};
339
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_array<_Tp[]>
345
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_array<_Tp[]>
340
346
  : public true_type {};
341
- template <class _Tp, size_t _Np> struct _LIBCPP_TYPE_VIS is_array<_Tp[_Np]>
347
+ template <class _Tp, size_t _Np> struct _LIBCPP_TYPE_VIS_ONLY is_array<_Tp[_Np]>
342
348
  : public true_type {};
343
349
 
344
350
  // is_pointer
@@ -346,23 +352,23 @@ template <class _Tp, size_t _Np> struct _LIBCPP_TYPE_VIS is_array<_Tp[_Np]>
346
352
  template <class _Tp> struct __is_pointer : public false_type {};
347
353
  template <class _Tp> struct __is_pointer<_Tp*> : public true_type {};
348
354
 
349
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_pointer
355
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_pointer
350
356
  : public __is_pointer<typename remove_cv<_Tp>::type> {};
351
357
 
352
358
  // is_reference
353
359
 
354
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_lvalue_reference : public false_type {};
355
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_lvalue_reference<_Tp&> : public true_type {};
360
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_lvalue_reference : public false_type {};
361
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_lvalue_reference<_Tp&> : public true_type {};
356
362
 
357
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_rvalue_reference : public false_type {};
363
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_rvalue_reference : public false_type {};
358
364
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
359
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_rvalue_reference<_Tp&&> : public true_type {};
365
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_rvalue_reference<_Tp&&> : public true_type {};
360
366
  #endif
361
367
 
362
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_reference : public false_type {};
363
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_reference<_Tp&> : public true_type {};
368
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_reference : public false_type {};
369
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_reference<_Tp&> : public true_type {};
364
370
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
365
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_reference<_Tp&&> : public true_type {};
371
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_reference<_Tp&&> : public true_type {};
366
372
  #endif
367
373
 
368
374
  #if defined(__clang__) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
@@ -373,13 +379,13 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_reference<_Tp&&> : public true_t
373
379
 
374
380
  #if __has_feature(is_union) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
375
381
 
376
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_union
382
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_union
377
383
  : public integral_constant<bool, __is_union(_Tp)> {};
378
384
 
379
385
  #else
380
386
 
381
387
  template <class _Tp> struct __libcpp_union : public false_type {};
382
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_union
388
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_union
383
389
  : public __libcpp_union<typename remove_cv<_Tp>::type> {};
384
390
 
385
391
  #endif
@@ -388,7 +394,7 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_union
388
394
 
389
395
  #if __has_feature(is_class) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
390
396
 
391
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_class
397
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_class
392
398
  : public integral_constant<bool, __is_class(_Tp)> {};
393
399
 
394
400
  #else
@@ -399,15 +405,15 @@ template <class _Tp> char __test(int _Tp::*);
399
405
  template <class _Tp> __two __test(...);
400
406
  }
401
407
 
402
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_class
408
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_class
403
409
  : public integral_constant<bool, sizeof(__is_class_imp::__test<_Tp>(0)) == 1 && !is_union<_Tp>::value> {};
404
410
 
405
411
  #endif
406
412
 
407
413
  // is_same
408
414
 
409
- template <class _Tp, class _Up> struct _LIBCPP_TYPE_VIS is_same : public false_type {};
410
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_same<_Tp, _Tp> : public true_type {};
415
+ template <class _Tp, class _Up> struct _LIBCPP_TYPE_VIS_ONLY is_same : public false_type {};
416
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_same<_Tp, _Tp> : public true_type {};
411
417
 
412
418
  // is_function
413
419
 
@@ -422,13 +428,13 @@ template <class _Tp, bool = is_class<_Tp>::value ||
422
428
  is_union<_Tp>::value ||
423
429
  is_void<_Tp>::value ||
424
430
  is_reference<_Tp>::value ||
425
- is_same<_Tp, nullptr_t>::value >
431
+ __is_nullptr_t<_Tp>::value >
426
432
  struct __is_function
427
433
  : public integral_constant<bool, sizeof(__is_function_imp::__test<_Tp>(__is_function_imp::__source<_Tp>())) == 1>
428
434
  {};
429
435
  template <class _Tp> struct __is_function<_Tp, true> : public false_type {};
430
436
 
431
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_function
437
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_function
432
438
  : public __is_function<_Tp> {};
433
439
 
434
440
  // is_member_function_pointer
@@ -436,7 +442,7 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_function
436
442
  template <class _Tp> struct __is_member_function_pointer : public false_type {};
437
443
  template <class _Tp, class _Up> struct __is_member_function_pointer<_Tp _Up::*> : public is_function<_Tp> {};
438
444
 
439
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_member_function_pointer
445
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_member_function_pointer
440
446
  : public __is_member_function_pointer<typename remove_cv<_Tp>::type> {};
441
447
 
442
448
  // is_member_pointer
@@ -444,12 +450,12 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_member_function_pointer
444
450
  template <class _Tp> struct __is_member_pointer : public false_type {};
445
451
  template <class _Tp, class _Up> struct __is_member_pointer<_Tp _Up::*> : public true_type {};
446
452
 
447
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_member_pointer
453
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_member_pointer
448
454
  : public __is_member_pointer<typename remove_cv<_Tp>::type> {};
449
455
 
450
456
  // is_member_object_pointer
451
457
 
452
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_member_object_pointer
458
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_member_object_pointer
453
459
  : public integral_constant<bool, is_member_pointer<_Tp>::value &&
454
460
  !is_member_function_pointer<_Tp>::value> {};
455
461
 
@@ -457,12 +463,12 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_member_object_pointer
457
463
 
458
464
  #if __has_feature(is_enum) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
459
465
 
460
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_enum
466
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_enum
461
467
  : public integral_constant<bool, __is_enum(_Tp)> {};
462
468
 
463
469
  #else
464
470
 
465
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_enum
471
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_enum
466
472
  : public integral_constant<bool, !is_void<_Tp>::value &&
467
473
  !is_integral<_Tp>::value &&
468
474
  !is_floating_point<_Tp>::value &&
@@ -478,31 +484,31 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_enum
478
484
 
479
485
  // is_arithmetic
480
486
 
481
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_arithmetic
487
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_arithmetic
482
488
  : public integral_constant<bool, is_integral<_Tp>::value ||
483
489
  is_floating_point<_Tp>::value> {};
484
490
 
485
491
  // is_fundamental
486
492
 
487
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_fundamental
493
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_fundamental
488
494
  : public integral_constant<bool, is_void<_Tp>::value ||
489
495
  __is_nullptr_t<_Tp>::value ||
490
496
  is_arithmetic<_Tp>::value> {};
491
497
 
492
498
  // is_scalar
493
499
 
494
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_scalar
500
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_scalar
495
501
  : public integral_constant<bool, is_arithmetic<_Tp>::value ||
496
502
  is_member_pointer<_Tp>::value ||
497
503
  is_pointer<_Tp>::value ||
498
504
  __is_nullptr_t<_Tp>::value ||
499
505
  is_enum<_Tp>::value > {};
500
506
 
501
- template <> struct _LIBCPP_TYPE_VIS is_scalar<nullptr_t> : public true_type {};
507
+ template <> struct _LIBCPP_TYPE_VIS_ONLY is_scalar<nullptr_t> : public true_type {};
502
508
 
503
509
  // is_object
504
510
 
505
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_object
511
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_object
506
512
  : public integral_constant<bool, is_scalar<_Tp>::value ||
507
513
  is_array<_Tp>::value ||
508
514
  is_union<_Tp>::value ||
@@ -510,7 +516,7 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_object
510
516
 
511
517
  // is_compound
512
518
 
513
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_compound
519
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_compound
514
520
  : public integral_constant<bool, !is_fundamental<_Tp>::value> {};
515
521
 
516
522
  // add_const
@@ -523,7 +529,7 @@ struct __add_const {typedef _Tp type;};
523
529
  template <class _Tp>
524
530
  struct __add_const<_Tp, false> {typedef const _Tp type;};
525
531
 
526
- template <class _Tp> struct _LIBCPP_TYPE_VIS add_const
532
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY add_const
527
533
  {typedef typename __add_const<_Tp>::type type;};
528
534
 
529
535
  #if _LIBCPP_STD_VER > 11
@@ -540,7 +546,7 @@ struct __add_volatile {typedef _Tp type;};
540
546
  template <class _Tp>
541
547
  struct __add_volatile<_Tp, false> {typedef volatile _Tp type;};
542
548
 
543
- template <class _Tp> struct _LIBCPP_TYPE_VIS add_volatile
549
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY add_volatile
544
550
  {typedef typename __add_volatile<_Tp>::type type;};
545
551
 
546
552
  #if _LIBCPP_STD_VER > 11
@@ -549,7 +555,7 @@ template <class _Tp> using add_volatile_t = typename add_volatile<_Tp>::type;
549
555
 
550
556
  // add_cv
551
557
 
552
- template <class _Tp> struct _LIBCPP_TYPE_VIS add_cv
558
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY add_cv
553
559
  {typedef typename add_const<typename add_volatile<_Tp>::type>::type type;};
554
560
 
555
561
  #if _LIBCPP_STD_VER > 11
@@ -558,10 +564,10 @@ template <class _Tp> using add_cv_t = typename add_cv<_Tp>::type;
558
564
 
559
565
  // remove_reference
560
566
 
561
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_reference {typedef _Tp type;};
562
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_reference<_Tp&> {typedef _Tp type;};
567
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_reference {typedef _Tp type;};
568
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_reference<_Tp&> {typedef _Tp type;};
563
569
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
564
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_reference<_Tp&&> {typedef _Tp type;};
570
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_reference<_Tp&&> {typedef _Tp type;};
565
571
  #endif
566
572
 
567
573
  #if _LIBCPP_STD_VER > 11
@@ -570,12 +576,12 @@ template <class _Tp> using remove_reference_t = typename remove_reference<_Tp>::
570
576
 
571
577
  // add_lvalue_reference
572
578
 
573
- template <class _Tp> struct _LIBCPP_TYPE_VIS add_lvalue_reference {typedef _Tp& type;};
574
- template <class _Tp> struct _LIBCPP_TYPE_VIS add_lvalue_reference<_Tp&> {typedef _Tp& type;}; // for older compiler
575
- template <> struct _LIBCPP_TYPE_VIS add_lvalue_reference<void> {typedef void type;};
576
- template <> struct _LIBCPP_TYPE_VIS add_lvalue_reference<const void> {typedef const void type;};
577
- template <> struct _LIBCPP_TYPE_VIS add_lvalue_reference<volatile void> {typedef volatile void type;};
578
- template <> struct _LIBCPP_TYPE_VIS add_lvalue_reference<const volatile void> {typedef const volatile void type;};
579
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY add_lvalue_reference {typedef _Tp& type;};
580
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY add_lvalue_reference<_Tp&> {typedef _Tp& type;}; // for older compiler
581
+ template <> struct _LIBCPP_TYPE_VIS_ONLY add_lvalue_reference<void> {typedef void type;};
582
+ template <> struct _LIBCPP_TYPE_VIS_ONLY add_lvalue_reference<const void> {typedef const void type;};
583
+ template <> struct _LIBCPP_TYPE_VIS_ONLY add_lvalue_reference<volatile void> {typedef volatile void type;};
584
+ template <> struct _LIBCPP_TYPE_VIS_ONLY add_lvalue_reference<const volatile void> {typedef const volatile void type;};
579
585
 
580
586
  #if _LIBCPP_STD_VER > 11
581
587
  template <class _Tp> using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type;
@@ -583,11 +589,11 @@ template <class _Tp> using add_lvalue_reference_t = typename add_lvalue_referenc
583
589
 
584
590
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
585
591
 
586
- template <class _Tp> struct _LIBCPP_TYPE_VIS add_rvalue_reference {typedef _Tp&& type;};
587
- template <> struct _LIBCPP_TYPE_VIS add_rvalue_reference<void> {typedef void type;};
588
- template <> struct _LIBCPP_TYPE_VIS add_rvalue_reference<const void> {typedef const void type;};
589
- template <> struct _LIBCPP_TYPE_VIS add_rvalue_reference<volatile void> {typedef volatile void type;};
590
- template <> struct _LIBCPP_TYPE_VIS add_rvalue_reference<const volatile void> {typedef const volatile void type;};
592
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY add_rvalue_reference {typedef _Tp&& type;};
593
+ template <> struct _LIBCPP_TYPE_VIS_ONLY add_rvalue_reference<void> {typedef void type;};
594
+ template <> struct _LIBCPP_TYPE_VIS_ONLY add_rvalue_reference<const void> {typedef const void type;};
595
+ template <> struct _LIBCPP_TYPE_VIS_ONLY add_rvalue_reference<volatile void> {typedef volatile void type;};
596
+ template <> struct _LIBCPP_TYPE_VIS_ONLY add_rvalue_reference<const volatile void> {typedef const volatile void type;};
591
597
 
592
598
  #if _LIBCPP_STD_VER > 11
593
599
  template <class _Tp> using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type;
@@ -616,11 +622,11 @@ struct __any
616
622
 
617
623
  // remove_pointer
618
624
 
619
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_pointer {typedef _Tp type;};
620
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_pointer<_Tp*> {typedef _Tp type;};
621
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_pointer<_Tp* const> {typedef _Tp type;};
622
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_pointer<_Tp* volatile> {typedef _Tp type;};
623
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_pointer<_Tp* const volatile> {typedef _Tp type;};
625
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_pointer {typedef _Tp type;};
626
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_pointer<_Tp*> {typedef _Tp type;};
627
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_pointer<_Tp* const> {typedef _Tp type;};
628
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_pointer<_Tp* volatile> {typedef _Tp type;};
629
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_pointer<_Tp* const volatile> {typedef _Tp type;};
624
630
 
625
631
  #if _LIBCPP_STD_VER > 11
626
632
  template <class _Tp> using remove_pointer_t = typename remove_pointer<_Tp>::type;
@@ -628,7 +634,7 @@ template <class _Tp> using remove_pointer_t = typename remove_pointer<_Tp>::type
628
634
 
629
635
  // add_pointer
630
636
 
631
- template <class _Tp> struct _LIBCPP_TYPE_VIS add_pointer
637
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY add_pointer
632
638
  {typedef typename remove_reference<_Tp>::type* type;};
633
639
 
634
640
  #if _LIBCPP_STD_VER > 11
@@ -648,7 +654,7 @@ struct __is_signed : public ___is_signed<_Tp> {};
648
654
 
649
655
  template <class _Tp> struct __is_signed<_Tp, false> : public false_type {};
650
656
 
651
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_signed : public __is_signed<_Tp> {};
657
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_signed : public __is_signed<_Tp> {};
652
658
 
653
659
  // is_unsigned
654
660
 
@@ -663,37 +669,37 @@ struct __is_unsigned : public ___is_unsigned<_Tp> {};
663
669
 
664
670
  template <class _Tp> struct __is_unsigned<_Tp, false> : public false_type {};
665
671
 
666
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_unsigned : public __is_unsigned<_Tp> {};
672
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_unsigned : public __is_unsigned<_Tp> {};
667
673
 
668
674
  // rank
669
675
 
670
- template <class _Tp> struct _LIBCPP_TYPE_VIS rank
676
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY rank
671
677
  : public integral_constant<size_t, 0> {};
672
- template <class _Tp> struct _LIBCPP_TYPE_VIS rank<_Tp[]>
678
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY rank<_Tp[]>
673
679
  : public integral_constant<size_t, rank<_Tp>::value + 1> {};
674
- template <class _Tp, size_t _Np> struct _LIBCPP_TYPE_VIS rank<_Tp[_Np]>
680
+ template <class _Tp, size_t _Np> struct _LIBCPP_TYPE_VIS_ONLY rank<_Tp[_Np]>
675
681
  : public integral_constant<size_t, rank<_Tp>::value + 1> {};
676
682
 
677
683
  // extent
678
684
 
679
- template <class _Tp, unsigned _Ip = 0> struct _LIBCPP_TYPE_VIS extent
685
+ template <class _Tp, unsigned _Ip = 0> struct _LIBCPP_TYPE_VIS_ONLY extent
680
686
  : public integral_constant<size_t, 0> {};
681
- template <class _Tp> struct _LIBCPP_TYPE_VIS extent<_Tp[], 0>
687
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY extent<_Tp[], 0>
682
688
  : public integral_constant<size_t, 0> {};
683
- template <class _Tp, unsigned _Ip> struct _LIBCPP_TYPE_VIS extent<_Tp[], _Ip>
689
+ template <class _Tp, unsigned _Ip> struct _LIBCPP_TYPE_VIS_ONLY extent<_Tp[], _Ip>
684
690
  : public integral_constant<size_t, extent<_Tp, _Ip-1>::value> {};
685
- template <class _Tp, size_t _Np> struct _LIBCPP_TYPE_VIS extent<_Tp[_Np], 0>
691
+ template <class _Tp, size_t _Np> struct _LIBCPP_TYPE_VIS_ONLY extent<_Tp[_Np], 0>
686
692
  : public integral_constant<size_t, _Np> {};
687
- template <class _Tp, size_t _Np, unsigned _Ip> struct _LIBCPP_TYPE_VIS extent<_Tp[_Np], _Ip>
693
+ template <class _Tp, size_t _Np, unsigned _Ip> struct _LIBCPP_TYPE_VIS_ONLY extent<_Tp[_Np], _Ip>
688
694
  : public integral_constant<size_t, extent<_Tp, _Ip-1>::value> {};
689
695
 
690
696
  // remove_extent
691
697
 
692
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_extent
698
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_extent
693
699
  {typedef _Tp type;};
694
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_extent<_Tp[]>
700
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_extent<_Tp[]>
695
701
  {typedef _Tp type;};
696
- template <class _Tp, size_t _Np> struct _LIBCPP_TYPE_VIS remove_extent<_Tp[_Np]>
702
+ template <class _Tp, size_t _Np> struct _LIBCPP_TYPE_VIS_ONLY remove_extent<_Tp[_Np]>
697
703
  {typedef _Tp type;};
698
704
 
699
705
  #if _LIBCPP_STD_VER > 11
@@ -702,17 +708,42 @@ template <class _Tp> using remove_extent_t = typename remove_extent<_Tp>::type;
702
708
 
703
709
  // remove_all_extents
704
710
 
705
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_all_extents
711
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_all_extents
706
712
  {typedef _Tp type;};
707
- template <class _Tp> struct _LIBCPP_TYPE_VIS remove_all_extents<_Tp[]>
713
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY remove_all_extents<_Tp[]>
708
714
  {typedef typename remove_all_extents<_Tp>::type type;};
709
- template <class _Tp, size_t _Np> struct _LIBCPP_TYPE_VIS remove_all_extents<_Tp[_Np]>
715
+ template <class _Tp, size_t _Np> struct _LIBCPP_TYPE_VIS_ONLY remove_all_extents<_Tp[_Np]>
710
716
  {typedef typename remove_all_extents<_Tp>::type type;};
711
717
 
712
718
  #if _LIBCPP_STD_VER > 11
713
719
  template <class _Tp> using remove_all_extents_t = typename remove_all_extents<_Tp>::type;
714
720
  #endif
715
721
 
722
+ // decay
723
+
724
+ template <class _Tp>
725
+ struct _LIBCPP_TYPE_VIS_ONLY decay
726
+ {
727
+ private:
728
+ typedef typename remove_reference<_Tp>::type _Up;
729
+ public:
730
+ typedef typename conditional
731
+ <
732
+ is_array<_Up>::value,
733
+ typename remove_extent<_Up>::type*,
734
+ typename conditional
735
+ <
736
+ is_function<_Up>::value,
737
+ typename add_pointer<_Up>::type,
738
+ typename remove_cv<_Up>::type
739
+ >::type
740
+ >::type type;
741
+ };
742
+
743
+ #if _LIBCPP_STD_VER > 11
744
+ template <class _Tp> using decay_t = typename decay<_Tp>::type;
745
+ #endif
746
+
716
747
  // is_abstract
717
748
 
718
749
  namespace __is_abstract_imp
@@ -726,14 +757,14 @@ struct __libcpp_abstract : public integral_constant<bool, sizeof(__is_abstract_i
726
757
 
727
758
  template <class _Tp> struct __libcpp_abstract<_Tp, false> : public false_type {};
728
759
 
729
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_abstract : public __libcpp_abstract<_Tp> {};
760
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_abstract : public __libcpp_abstract<_Tp> {};
730
761
 
731
762
  // is_base_of
732
763
 
733
764
  #ifdef _LIBCPP_HAS_IS_BASE_OF
734
765
 
735
766
  template <class _Bp, class _Dp>
736
- struct _LIBCPP_TYPE_VIS is_base_of
767
+ struct _LIBCPP_TYPE_VIS_ONLY is_base_of
737
768
  : public integral_constant<bool, __is_base_of(_Bp, _Dp)> {};
738
769
 
739
770
  #else // __has_feature(is_base_of)
@@ -757,7 +788,7 @@ template <class _Bp, class _Dp> __two __test(...);
757
788
  }
758
789
 
759
790
  template <class _Bp, class _Dp>
760
- struct _LIBCPP_TYPE_VIS is_base_of
791
+ struct _LIBCPP_TYPE_VIS_ONLY is_base_of
761
792
  : public integral_constant<bool, is_class<_Bp>::value &&
762
793
  sizeof(__is_base_of_imp::__test<_Bp, _Dp>(0)) == 2> {};
763
794
 
@@ -767,7 +798,7 @@ struct _LIBCPP_TYPE_VIS is_base_of
767
798
 
768
799
  #if __has_feature(is_convertible_to)
769
800
 
770
- template <class _T1, class _T2> struct _LIBCPP_TYPE_VIS is_convertible
801
+ template <class _T1, class _T2> struct _LIBCPP_TYPE_VIS_ONLY is_convertible
771
802
  : public integral_constant<bool, __is_convertible_to(_T1, _T2) &&
772
803
  !is_abstract<_T2>::value> {};
773
804
 
@@ -873,7 +904,7 @@ template <class _T1, class _T2> struct __is_convertible<_T1, _T2, 1, 3> : public
873
904
  template <class _T1, class _T2> struct __is_convertible<_T1, _T2, 2, 3> : public false_type {};
874
905
  template <class _T1, class _T2> struct __is_convertible<_T1, _T2, 3, 3> : public true_type {};
875
906
 
876
- template <class _T1, class _T2> struct _LIBCPP_TYPE_VIS is_convertible
907
+ template <class _T1, class _T2> struct _LIBCPP_TYPE_VIS_ONLY is_convertible
877
908
  : public __is_convertible<_T1, _T2>
878
909
  {
879
910
  static const size_t __complete_check1 = __is_convertible_check<_T1>::__v;
@@ -887,7 +918,7 @@ template <class _T1, class _T2> struct _LIBCPP_TYPE_VIS is_convertible
887
918
  #if __has_feature(is_empty)
888
919
 
889
920
  template <class _Tp>
890
- struct _LIBCPP_TYPE_VIS is_empty
921
+ struct _LIBCPP_TYPE_VIS_ONLY is_empty
891
922
  : public integral_constant<bool, __is_empty(_Tp)> {};
892
923
 
893
924
  #else // __has_feature(is_empty)
@@ -909,7 +940,7 @@ struct __libcpp_empty : public integral_constant<bool, sizeof(__is_empty1<_Tp>)
909
940
 
910
941
  template <class _Tp> struct __libcpp_empty<_Tp, false> : public false_type {};
911
942
 
912
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_empty : public __libcpp_empty<_Tp> {};
943
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_empty : public __libcpp_empty<_Tp> {};
913
944
 
914
945
  #endif // __has_feature(is_empty)
915
946
 
@@ -918,7 +949,7 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_empty : public __libcpp_empty<_T
918
949
  #if __has_feature(is_polymorphic)
919
950
 
920
951
  template <class _Tp>
921
- struct _LIBCPP_TYPE_VIS is_polymorphic
952
+ struct _LIBCPP_TYPE_VIS_ONLY is_polymorphic
922
953
  : public integral_constant<bool, __is_polymorphic(_Tp)> {};
923
954
 
924
955
  #else
@@ -928,7 +959,7 @@ template<typename _Tp> char &__is_polymorphic_impl(
928
959
  int>::type);
929
960
  template<typename _Tp> __two &__is_polymorphic_impl(...);
930
961
 
931
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_polymorphic
962
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_polymorphic
932
963
  : public integral_constant<bool, sizeof(__is_polymorphic_impl<_Tp>(0)) == 1> {};
933
964
 
934
965
  #endif // __has_feature(is_polymorphic)
@@ -937,19 +968,19 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_polymorphic
937
968
 
938
969
  #if __has_feature(has_virtual_destructor) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
939
970
 
940
- template <class _Tp> struct _LIBCPP_TYPE_VIS has_virtual_destructor
971
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY has_virtual_destructor
941
972
  : public integral_constant<bool, __has_virtual_destructor(_Tp)> {};
942
973
 
943
974
  #else // _LIBCPP_HAS_TYPE_TRAITS
944
975
 
945
- template <class _Tp> struct _LIBCPP_TYPE_VIS has_virtual_destructor
976
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY has_virtual_destructor
946
977
  : public false_type {};
947
978
 
948
979
  #endif // _LIBCPP_HAS_TYPE_TRAITS
949
980
 
950
981
  // alignment_of
951
982
 
952
- template <class _Tp> struct _LIBCPP_TYPE_VIS alignment_of
983
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY alignment_of
953
984
  : public integral_constant<size_t, __alignof__(_Tp)> {};
954
985
 
955
986
  // aligned_storage
@@ -1037,7 +1068,7 @@ struct __find_max_align<__type_list<_Hp, _Tp>, _Len>
1037
1068
  : public integral_constant<size_t, __select_align<_Len, _Hp::value, __find_max_align<_Tp, _Len>::value>::value> {};
1038
1069
 
1039
1070
  template <size_t _Len, size_t _Align = __find_max_align<__all_types, _Len>::value>
1040
- struct _LIBCPP_TYPE_VIS aligned_storage
1071
+ struct _LIBCPP_TYPE_VIS_ONLY aligned_storage
1041
1072
  {
1042
1073
  typedef typename __find_pod<__all_types, _Align>::type _Aligner;
1043
1074
  static_assert(!is_void<_Aligner>::value, "");
@@ -1055,7 +1086,7 @@ template <size_t _Len, size_t _Align = __find_max_align<__all_types, _Len>::valu
1055
1086
 
1056
1087
  #define _CREATE_ALIGNED_STORAGE_SPECIALIZATION(n) \
1057
1088
  template <size_t _Len>\
1058
- struct _LIBCPP_TYPE_VIS aligned_storage<_Len, n>\
1089
+ struct _LIBCPP_TYPE_VIS_ONLY aligned_storage<_Len, n>\
1059
1090
  {\
1060
1091
  struct _ALIGNAS(n) type\
1061
1092
  {\
@@ -1274,7 +1305,7 @@ template <> struct __make_signed< signed long long, true> {typedef long long ty
1274
1305
  template <> struct __make_signed<unsigned long long, true> {typedef long long type;};
1275
1306
 
1276
1307
  template <class _Tp>
1277
- struct _LIBCPP_TYPE_VIS make_signed
1308
+ struct _LIBCPP_TYPE_VIS_ONLY make_signed
1278
1309
  {
1279
1310
  typedef typename __apply_cv<_Tp, typename __make_signed<typename remove_cv<_Tp>::type>::type>::type type;
1280
1311
  };
@@ -1303,7 +1334,7 @@ template <> struct __make_unsigned< signed long long, true> {typedef unsigned l
1303
1334
  template <> struct __make_unsigned<unsigned long long, true> {typedef unsigned long long type;};
1304
1335
 
1305
1336
  template <class _Tp>
1306
- struct _LIBCPP_TYPE_VIS make_unsigned
1337
+ struct _LIBCPP_TYPE_VIS_ONLY make_unsigned
1307
1338
  {
1308
1339
  typedef typename __apply_cv<_Tp, typename __make_unsigned<typename remove_cv<_Tp>::type>::type>::type type;
1309
1340
  };
@@ -1315,21 +1346,21 @@ template <class _Tp> using make_unsigned_t = typename make_unsigned<_Tp>::type;
1315
1346
  #ifdef _LIBCPP_HAS_NO_VARIADICS
1316
1347
 
1317
1348
  template <class _Tp, class _Up = void, class V = void>
1318
- struct _LIBCPP_TYPE_VIS common_type
1349
+ struct _LIBCPP_TYPE_VIS_ONLY common_type
1319
1350
  {
1320
1351
  public:
1321
1352
  typedef typename common_type<typename common_type<_Tp, _Up>::type, V>::type type;
1322
1353
  };
1323
1354
 
1324
1355
  template <class _Tp>
1325
- struct _LIBCPP_TYPE_VIS common_type<_Tp, void, void>
1356
+ struct _LIBCPP_TYPE_VIS_ONLY common_type<_Tp, void, void>
1326
1357
  {
1327
1358
  public:
1328
1359
  typedef _Tp type;
1329
1360
  };
1330
1361
 
1331
1362
  template <class _Tp, class _Up>
1332
- struct _LIBCPP_TYPE_VIS common_type<_Tp, _Up, void>
1363
+ struct _LIBCPP_TYPE_VIS_ONLY common_type<_Tp, _Up, void>
1333
1364
  {
1334
1365
  private:
1335
1366
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
@@ -1348,24 +1379,24 @@ public:
1348
1379
  template <class ..._Tp> struct common_type;
1349
1380
 
1350
1381
  template <class _Tp>
1351
- struct _LIBCPP_TYPE_VIS common_type<_Tp>
1382
+ struct _LIBCPP_TYPE_VIS_ONLY common_type<_Tp>
1352
1383
  {
1353
- typedef _Tp type;
1384
+ typedef typename decay<_Tp>::type type;
1354
1385
  };
1355
1386
 
1356
1387
  template <class _Tp, class _Up>
1357
- struct _LIBCPP_TYPE_VIS common_type<_Tp, _Up>
1388
+ struct _LIBCPP_TYPE_VIS_ONLY common_type<_Tp, _Up>
1358
1389
  {
1359
1390
  private:
1360
1391
  static _Tp&& __t();
1361
1392
  static _Up&& __u();
1362
1393
  static bool __f();
1363
1394
  public:
1364
- typedef typename remove_reference<decltype(__f() ? __t() : __u())>::type type;
1395
+ typedef typename decay<decltype(__f() ? __t() : __u())>::type type;
1365
1396
  };
1366
1397
 
1367
1398
  template <class _Tp, class _Up, class ..._Vp>
1368
- struct _LIBCPP_TYPE_VIS common_type<_Tp, _Up, _Vp...>
1399
+ struct _LIBCPP_TYPE_VIS_ONLY common_type<_Tp, _Up, _Vp...>
1369
1400
  {
1370
1401
  typedef typename common_type<typename common_type<_Tp, _Up>::type, _Vp...>::type type;
1371
1402
  };
@@ -1378,8 +1409,10 @@ template <class ..._Tp> using common_type_t = typename common_type<_Tp...>::type
1378
1409
 
1379
1410
  // is_assignable
1380
1411
 
1412
+ template<typename, typename T> struct __select_2nd { typedef T type; };
1413
+
1381
1414
  template <class _Tp, class _Arg>
1382
- decltype((_VSTD::declval<_Tp>() = _VSTD::declval<_Arg>(), true_type()))
1415
+ typename __select_2nd<decltype((_VSTD::declval<_Tp>() = _VSTD::declval<_Arg>())), true_type>::type
1383
1416
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1384
1417
  __is_assignable_test(_Tp&&, _Arg&&);
1385
1418
  #else
@@ -1413,13 +1446,13 @@ struct is_assignable
1413
1446
 
1414
1447
  // is_copy_assignable
1415
1448
 
1416
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_copy_assignable
1449
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_copy_assignable
1417
1450
  : public is_assignable<typename add_lvalue_reference<_Tp>::type,
1418
1451
  const typename add_lvalue_reference<_Tp>::type> {};
1419
1452
 
1420
1453
  // is_move_assignable
1421
1454
 
1422
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_move_assignable
1455
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_move_assignable
1423
1456
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1424
1457
  : public is_assignable<typename add_lvalue_reference<_Tp>::type,
1425
1458
  const typename add_rvalue_reference<_Tp>::type> {};
@@ -1446,7 +1479,8 @@ __is_destructible_test(_Tp&);
1446
1479
  false_type
1447
1480
  __is_destructible_test(__any);
1448
1481
 
1449
- template <class _Tp, bool = is_void<_Tp>::value || is_abstract<_Tp>::value>
1482
+ template <class _Tp, bool = is_void<_Tp>::value || is_abstract<_Tp>::value
1483
+ || is_function<_Tp>::value>
1450
1484
  struct __destructible_imp
1451
1485
  : public common_type
1452
1486
  <
@@ -1461,6 +1495,10 @@ template <class _Tp>
1461
1495
  struct is_destructible
1462
1496
  : public __destructible_imp<_Tp> {};
1463
1497
 
1498
+ template <class _Tp>
1499
+ struct is_destructible<_Tp[]>
1500
+ : public false_type {};
1501
+
1464
1502
  // move
1465
1503
 
1466
1504
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
@@ -1533,29 +1571,6 @@ public:
1533
1571
 
1534
1572
  #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1535
1573
 
1536
- template <class _Tp>
1537
- struct _LIBCPP_TYPE_VIS decay
1538
- {
1539
- private:
1540
- typedef typename remove_reference<_Tp>::type _Up;
1541
- public:
1542
- typedef typename conditional
1543
- <
1544
- is_array<_Up>::value,
1545
- typename remove_extent<_Up>::type*,
1546
- typename conditional
1547
- <
1548
- is_function<_Up>::value,
1549
- typename add_pointer<_Up>::type,
1550
- typename remove_cv<_Up>::type
1551
- >::type
1552
- >::type type;
1553
- };
1554
-
1555
- #if _LIBCPP_STD_VER > 11
1556
- template <class _Tp> using decay_t = typename decay<_Tp>::type;
1557
- #endif
1558
-
1559
1574
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1560
1575
 
1561
1576
  template <class _Tp>
@@ -1917,7 +1932,7 @@ class __result_of<_Fn(_Tp, _A0, _A1, _A2), false, true> // _Fn must be member p
1917
1932
  // result_of
1918
1933
 
1919
1934
  template <class _Fn>
1920
- class _LIBCPP_TYPE_VIS result_of<_Fn()>
1935
+ class _LIBCPP_TYPE_VIS_ONLY result_of<_Fn()>
1921
1936
  : public __result_of<_Fn(),
1922
1937
  is_class<typename remove_reference<_Fn>::type>::value ||
1923
1938
  is_function<typename remove_reference<_Fn>::type>::value,
@@ -1927,7 +1942,7 @@ class _LIBCPP_TYPE_VIS result_of<_Fn()>
1927
1942
  };
1928
1943
 
1929
1944
  template <class _Fn, class _A0>
1930
- class _LIBCPP_TYPE_VIS result_of<_Fn(_A0)>
1945
+ class _LIBCPP_TYPE_VIS_ONLY result_of<_Fn(_A0)>
1931
1946
  : public __result_of<_Fn(_A0),
1932
1947
  is_class<typename remove_reference<_Fn>::type>::value ||
1933
1948
  is_function<typename remove_reference<_Fn>::type>::value,
@@ -1937,7 +1952,7 @@ class _LIBCPP_TYPE_VIS result_of<_Fn(_A0)>
1937
1952
  };
1938
1953
 
1939
1954
  template <class _Fn, class _A0, class _A1>
1940
- class _LIBCPP_TYPE_VIS result_of<_Fn(_A0, _A1)>
1955
+ class _LIBCPP_TYPE_VIS_ONLY result_of<_Fn(_A0, _A1)>
1941
1956
  : public __result_of<_Fn(_A0, _A1),
1942
1957
  is_class<typename remove_reference<_Fn>::type>::value ||
1943
1958
  is_function<typename remove_reference<_Fn>::type>::value,
@@ -1947,7 +1962,7 @@ class _LIBCPP_TYPE_VIS result_of<_Fn(_A0, _A1)>
1947
1962
  };
1948
1963
 
1949
1964
  template <class _Fn, class _A0, class _A1, class _A2>
1950
- class _LIBCPP_TYPE_VIS result_of<_Fn(_A0, _A1, _A2)>
1965
+ class _LIBCPP_TYPE_VIS_ONLY result_of<_Fn(_A0, _A1, _A2)>
1951
1966
  : public __result_of<_Fn(_A0, _A1, _A2),
1952
1967
  is_class<typename remove_reference<_Fn>::type>::value ||
1953
1968
  is_function<typename remove_reference<_Fn>::type>::value,
@@ -1964,8 +1979,6 @@ class _LIBCPP_TYPE_VIS result_of<_Fn(_A0, _A1, _A2)>
1964
1979
 
1965
1980
  // main is_constructible test
1966
1981
 
1967
- template<typename, typename T> struct __select_2nd { typedef T type; };
1968
-
1969
1982
  template <class _Tp, class ..._Args>
1970
1983
  typename __select_2nd<decltype(_VSTD::move(_Tp(_VSTD::declval<_Args>()...))), true_type>::type
1971
1984
  __is_constructible_test(_Tp&&, _Args&& ...);
@@ -2052,7 +2065,7 @@ struct __contains_void<_A0, _Args...>
2052
2065
  // is_constructible entry point
2053
2066
 
2054
2067
  template <class _Tp, class... _Args>
2055
- struct _LIBCPP_TYPE_VIS is_constructible
2068
+ struct _LIBCPP_TYPE_VIS_ONLY is_constructible
2056
2069
  : public __is_constructible_void_check<__contains_void<_Tp, _Args...>::value
2057
2070
  || is_abstract<_Tp>::value,
2058
2071
  _Tp, _Args...>
@@ -2200,7 +2213,7 @@ struct __nat {};
2200
2213
 
2201
2214
  template <class _Tp, class _A0 = __is_construct::__nat,
2202
2215
  class _A1 = __is_construct::__nat>
2203
- struct _LIBCPP_TYPE_VIS is_constructible
2216
+ struct _LIBCPP_TYPE_VIS_ONLY is_constructible
2204
2217
  : public __is_constructible2_void_check<is_void<_Tp>::value
2205
2218
  || is_abstract<_Tp>::value
2206
2219
  || is_function<_Tp>::value
@@ -2210,7 +2223,7 @@ struct _LIBCPP_TYPE_VIS is_constructible
2210
2223
  {};
2211
2224
 
2212
2225
  template <class _Tp>
2213
- struct _LIBCPP_TYPE_VIS is_constructible<_Tp, __is_construct::__nat, __is_construct::__nat>
2226
+ struct _LIBCPP_TYPE_VIS_ONLY is_constructible<_Tp, __is_construct::__nat, __is_construct::__nat>
2214
2227
  : public __is_constructible0_void_check<is_void<_Tp>::value
2215
2228
  || is_abstract<_Tp>::value
2216
2229
  || is_function<_Tp>::value,
@@ -2218,7 +2231,7 @@ struct _LIBCPP_TYPE_VIS is_constructible<_Tp, __is_construct::__nat, __is_constr
2218
2231
  {};
2219
2232
 
2220
2233
  template <class _Tp, class _A0>
2221
- struct _LIBCPP_TYPE_VIS is_constructible<_Tp, _A0, __is_construct::__nat>
2234
+ struct _LIBCPP_TYPE_VIS_ONLY is_constructible<_Tp, _A0, __is_construct::__nat>
2222
2235
  : public __is_constructible1_void_check<is_void<_Tp>::value
2223
2236
  || is_abstract<_Tp>::value
2224
2237
  || is_function<_Tp>::value
@@ -2266,21 +2279,21 @@ struct __is_constructible2_imp<false, _Ap[], _A0, _A1>
2266
2279
  // is_default_constructible
2267
2280
 
2268
2281
  template <class _Tp>
2269
- struct _LIBCPP_TYPE_VIS is_default_constructible
2282
+ struct _LIBCPP_TYPE_VIS_ONLY is_default_constructible
2270
2283
  : public is_constructible<_Tp>
2271
2284
  {};
2272
2285
 
2273
2286
  // is_copy_constructible
2274
2287
 
2275
2288
  template <class _Tp>
2276
- struct _LIBCPP_TYPE_VIS is_copy_constructible
2289
+ struct _LIBCPP_TYPE_VIS_ONLY is_copy_constructible
2277
2290
  : public is_constructible<_Tp, const typename add_lvalue_reference<_Tp>::type>
2278
2291
  {};
2279
2292
 
2280
2293
  // is_move_constructible
2281
2294
 
2282
2295
  template <class _Tp>
2283
- struct _LIBCPP_TYPE_VIS is_move_constructible
2296
+ struct _LIBCPP_TYPE_VIS_ONLY is_move_constructible
2284
2297
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
2285
2298
  : public is_constructible<_Tp, typename add_rvalue_reference<_Tp>::type>
2286
2299
  #else
@@ -2295,7 +2308,7 @@ struct _LIBCPP_TYPE_VIS is_move_constructible
2295
2308
  #if __has_feature(is_trivially_constructible)
2296
2309
 
2297
2310
  template <class _Tp, class... _Args>
2298
- struct _LIBCPP_TYPE_VIS is_trivially_constructible
2311
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible
2299
2312
  : integral_constant<bool, __is_trivially_constructible(_Tp, _Args...)>
2300
2313
  {
2301
2314
  };
@@ -2303,13 +2316,13 @@ struct _LIBCPP_TYPE_VIS is_trivially_constructible
2303
2316
  #else // !__has_feature(is_trivially_constructible)
2304
2317
 
2305
2318
  template <class _Tp, class... _Args>
2306
- struct _LIBCPP_TYPE_VIS is_trivially_constructible
2319
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible
2307
2320
  : false_type
2308
2321
  {
2309
2322
  };
2310
2323
 
2311
2324
  template <class _Tp>
2312
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp>
2325
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp>
2313
2326
  #if __has_feature(has_trivial_constructor) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2314
2327
  : integral_constant<bool, __has_trivial_constructor(_Tp)>
2315
2328
  #else
@@ -2320,22 +2333,22 @@ struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp>
2320
2333
 
2321
2334
  template <class _Tp>
2322
2335
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
2323
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, _Tp&&>
2336
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp, _Tp&&>
2324
2337
  #else
2325
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, _Tp>
2338
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp, _Tp>
2326
2339
  #endif
2327
2340
  : integral_constant<bool, is_scalar<_Tp>::value>
2328
2341
  {
2329
2342
  };
2330
2343
 
2331
2344
  template <class _Tp>
2332
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, const _Tp&>
2345
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp, const _Tp&>
2333
2346
  : integral_constant<bool, is_scalar<_Tp>::value>
2334
2347
  {
2335
2348
  };
2336
2349
 
2337
2350
  template <class _Tp>
2338
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, _Tp&>
2351
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp, _Tp&>
2339
2352
  : integral_constant<bool, is_scalar<_Tp>::value>
2340
2353
  {
2341
2354
  };
@@ -2346,7 +2359,7 @@ struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, _Tp&>
2346
2359
 
2347
2360
  template <class _Tp, class _A0 = __is_construct::__nat,
2348
2361
  class _A1 = __is_construct::__nat>
2349
- struct _LIBCPP_TYPE_VIS is_trivially_constructible
2362
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible
2350
2363
  : false_type
2351
2364
  {
2352
2365
  };
@@ -2354,28 +2367,28 @@ struct _LIBCPP_TYPE_VIS is_trivially_constructible
2354
2367
  #if __has_feature(is_trivially_constructible)
2355
2368
 
2356
2369
  template <class _Tp>
2357
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, __is_construct::__nat,
2370
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp, __is_construct::__nat,
2358
2371
  __is_construct::__nat>
2359
2372
  : integral_constant<bool, __is_trivially_constructible(_Tp)>
2360
2373
  {
2361
2374
  };
2362
2375
 
2363
2376
  template <class _Tp>
2364
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, _Tp,
2377
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp, _Tp,
2365
2378
  __is_construct::__nat>
2366
2379
  : integral_constant<bool, __is_trivially_constructible(_Tp, _Tp)>
2367
2380
  {
2368
2381
  };
2369
2382
 
2370
2383
  template <class _Tp>
2371
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, const _Tp&,
2384
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp, const _Tp&,
2372
2385
  __is_construct::__nat>
2373
2386
  : integral_constant<bool, __is_trivially_constructible(_Tp, const _Tp&)>
2374
2387
  {
2375
2388
  };
2376
2389
 
2377
2390
  template <class _Tp>
2378
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, _Tp&,
2391
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp, _Tp&,
2379
2392
  __is_construct::__nat>
2380
2393
  : integral_constant<bool, __is_trivially_constructible(_Tp, _Tp&)>
2381
2394
  {
@@ -2384,28 +2397,28 @@ struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, _Tp&,
2384
2397
  #else // !__has_feature(is_trivially_constructible)
2385
2398
 
2386
2399
  template <class _Tp>
2387
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, __is_construct::__nat,
2400
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp, __is_construct::__nat,
2388
2401
  __is_construct::__nat>
2389
2402
  : integral_constant<bool, is_scalar<_Tp>::value>
2390
2403
  {
2391
2404
  };
2392
2405
 
2393
2406
  template <class _Tp>
2394
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, _Tp,
2407
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp, _Tp,
2395
2408
  __is_construct::__nat>
2396
2409
  : integral_constant<bool, is_scalar<_Tp>::value>
2397
2410
  {
2398
2411
  };
2399
2412
 
2400
2413
  template <class _Tp>
2401
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, const _Tp&,
2414
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp, const _Tp&,
2402
2415
  __is_construct::__nat>
2403
2416
  : integral_constant<bool, is_scalar<_Tp>::value>
2404
2417
  {
2405
2418
  };
2406
2419
 
2407
2420
  template <class _Tp>
2408
- struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, _Tp&,
2421
+ struct _LIBCPP_TYPE_VIS_ONLY is_trivially_constructible<_Tp, _Tp&,
2409
2422
  __is_construct::__nat>
2410
2423
  : integral_constant<bool, is_scalar<_Tp>::value>
2411
2424
  {
@@ -2417,19 +2430,19 @@ struct _LIBCPP_TYPE_VIS is_trivially_constructible<_Tp, _Tp&,
2417
2430
 
2418
2431
  // is_trivially_default_constructible
2419
2432
 
2420
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_trivially_default_constructible
2433
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_trivially_default_constructible
2421
2434
  : public is_trivially_constructible<_Tp>
2422
2435
  {};
2423
2436
 
2424
2437
  // is_trivially_copy_constructible
2425
2438
 
2426
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_trivially_copy_constructible
2439
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_trivially_copy_constructible
2427
2440
  : public is_trivially_constructible<_Tp, const typename add_lvalue_reference<_Tp>::type>
2428
2441
  {};
2429
2442
 
2430
2443
  // is_trivially_move_constructible
2431
2444
 
2432
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_trivially_move_constructible
2445
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_trivially_move_constructible
2433
2446
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
2434
2447
  : public is_trivially_constructible<_Tp, typename add_rvalue_reference<_Tp>::type>
2435
2448
  #else
@@ -2477,14 +2490,14 @@ struct is_trivially_assignable<_Tp&, _Tp&&>
2477
2490
 
2478
2491
  // is_trivially_copy_assignable
2479
2492
 
2480
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_trivially_copy_assignable
2493
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_trivially_copy_assignable
2481
2494
  : public is_trivially_assignable<typename add_lvalue_reference<_Tp>::type,
2482
2495
  const typename add_lvalue_reference<_Tp>::type>
2483
2496
  {};
2484
2497
 
2485
2498
  // is_trivially_move_assignable
2486
2499
 
2487
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_trivially_move_assignable
2500
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_trivially_move_assignable
2488
2501
  : public is_trivially_assignable<typename add_lvalue_reference<_Tp>::type,
2489
2502
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
2490
2503
  typename add_rvalue_reference<_Tp>::type>
@@ -2497,7 +2510,7 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_trivially_move_assignable
2497
2510
 
2498
2511
  #if __has_feature(has_trivial_destructor) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2499
2512
 
2500
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_trivially_destructible
2513
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_trivially_destructible
2501
2514
  : public integral_constant<bool, __has_trivial_destructor(_Tp)> {};
2502
2515
 
2503
2516
  #else // _LIBCPP_HAS_TYPE_TRAITS
@@ -2506,7 +2519,7 @@ template <class _Tp> struct __libcpp_trivial_destructor
2506
2519
  : public integral_constant<bool, is_scalar<_Tp>::value ||
2507
2520
  is_reference<_Tp>::value> {};
2508
2521
 
2509
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_trivially_destructible
2522
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_trivially_destructible
2510
2523
  : public __libcpp_trivial_destructor<typename remove_all_extents<_Tp>::type> {};
2511
2524
 
2512
2525
  #endif // _LIBCPP_HAS_TYPE_TRAITS
@@ -2532,13 +2545,13 @@ struct __is_nothrow_constructible<false, _Tp, _Args...>
2532
2545
  };
2533
2546
 
2534
2547
  template <class _Tp, class... _Args>
2535
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible
2548
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible
2536
2549
  : __is_nothrow_constructible<is_constructible<_Tp, _Args...>::value, _Tp, _Args...>
2537
2550
  {
2538
2551
  };
2539
2552
 
2540
2553
  template <class _Tp, size_t _Ns>
2541
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp[_Ns]>
2554
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible<_Tp[_Ns]>
2542
2555
  : __is_nothrow_constructible<is_constructible<_Tp>::value, _Tp>
2543
2556
  {
2544
2557
  };
@@ -2546,13 +2559,13 @@ struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp[_Ns]>
2546
2559
  #else // __has_feature(cxx_noexcept)
2547
2560
 
2548
2561
  template <class _Tp, class... _Args>
2549
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible
2562
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible
2550
2563
  : false_type
2551
2564
  {
2552
2565
  };
2553
2566
 
2554
2567
  template <class _Tp>
2555
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp>
2568
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible<_Tp>
2556
2569
  #if __has_feature(has_nothrow_constructor) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2557
2570
  : integral_constant<bool, __has_nothrow_constructor(_Tp)>
2558
2571
  #else
@@ -2563,9 +2576,9 @@ struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp>
2563
2576
 
2564
2577
  template <class _Tp>
2565
2578
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
2566
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, _Tp&&>
2579
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible<_Tp, _Tp&&>
2567
2580
  #else
2568
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, _Tp>
2581
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible<_Tp, _Tp>
2569
2582
  #endif
2570
2583
  #if __has_feature(has_nothrow_copy) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2571
2584
  : integral_constant<bool, __has_nothrow_copy(_Tp)>
@@ -2576,7 +2589,7 @@ struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, _Tp>
2576
2589
  };
2577
2590
 
2578
2591
  template <class _Tp>
2579
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, const _Tp&>
2592
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible<_Tp, const _Tp&>
2580
2593
  #if __has_feature(has_nothrow_copy) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2581
2594
  : integral_constant<bool, __has_nothrow_copy(_Tp)>
2582
2595
  #else
@@ -2586,7 +2599,7 @@ struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, const _Tp&>
2586
2599
  };
2587
2600
 
2588
2601
  template <class _Tp>
2589
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, _Tp&>
2602
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible<_Tp, _Tp&>
2590
2603
  #if __has_feature(has_nothrow_copy) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2591
2604
  : integral_constant<bool, __has_nothrow_copy(_Tp)>
2592
2605
  #else
@@ -2601,13 +2614,13 @@ struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, _Tp&>
2601
2614
 
2602
2615
  template <class _Tp, class _A0 = __is_construct::__nat,
2603
2616
  class _A1 = __is_construct::__nat>
2604
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible
2617
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible
2605
2618
  : false_type
2606
2619
  {
2607
2620
  };
2608
2621
 
2609
2622
  template <class _Tp>
2610
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, __is_construct::__nat,
2623
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible<_Tp, __is_construct::__nat,
2611
2624
  __is_construct::__nat>
2612
2625
  #if __has_feature(has_nothrow_constructor) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2613
2626
  : integral_constant<bool, __has_nothrow_constructor(_Tp)>
@@ -2618,7 +2631,7 @@ struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, __is_construct::__nat,
2618
2631
  };
2619
2632
 
2620
2633
  template <class _Tp>
2621
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, _Tp,
2634
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible<_Tp, _Tp,
2622
2635
  __is_construct::__nat>
2623
2636
  #if __has_feature(has_nothrow_copy) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2624
2637
  : integral_constant<bool, __has_nothrow_copy(_Tp)>
@@ -2629,7 +2642,7 @@ struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, _Tp,
2629
2642
  };
2630
2643
 
2631
2644
  template <class _Tp>
2632
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, const _Tp&,
2645
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible<_Tp, const _Tp&,
2633
2646
  __is_construct::__nat>
2634
2647
  #if __has_feature(has_nothrow_copy) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2635
2648
  : integral_constant<bool, __has_nothrow_copy(_Tp)>
@@ -2640,7 +2653,7 @@ struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, const _Tp&,
2640
2653
  };
2641
2654
 
2642
2655
  template <class _Tp>
2643
- struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, _Tp&,
2656
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_constructible<_Tp, _Tp&,
2644
2657
  __is_construct::__nat>
2645
2658
  #if __has_feature(has_nothrow_copy) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2646
2659
  : integral_constant<bool, __has_nothrow_copy(_Tp)>
@@ -2654,19 +2667,19 @@ struct _LIBCPP_TYPE_VIS is_nothrow_constructible<_Tp, _Tp&,
2654
2667
 
2655
2668
  // is_nothrow_default_constructible
2656
2669
 
2657
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_nothrow_default_constructible
2670
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_default_constructible
2658
2671
  : public is_nothrow_constructible<_Tp>
2659
2672
  {};
2660
2673
 
2661
2674
  // is_nothrow_copy_constructible
2662
2675
 
2663
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_nothrow_copy_constructible
2676
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_copy_constructible
2664
2677
  : public is_nothrow_constructible<_Tp, const typename add_lvalue_reference<_Tp>::type>
2665
2678
  {};
2666
2679
 
2667
2680
  // is_nothrow_move_constructible
2668
2681
 
2669
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_nothrow_move_constructible
2682
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_move_constructible
2670
2683
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
2671
2684
  : public is_nothrow_constructible<_Tp, typename add_rvalue_reference<_Tp>::type>
2672
2685
  #else
@@ -2693,7 +2706,7 @@ struct __is_nothrow_assignable<true, _Tp, _Arg>
2693
2706
  };
2694
2707
 
2695
2708
  template <class _Tp, class _Arg>
2696
- struct _LIBCPP_TYPE_VIS is_nothrow_assignable
2709
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_assignable
2697
2710
  : public __is_nothrow_assignable<is_assignable<_Tp, _Arg>::value, _Tp, _Arg>
2698
2711
  {
2699
2712
  };
@@ -2701,11 +2714,11 @@ struct _LIBCPP_TYPE_VIS is_nothrow_assignable
2701
2714
  #else // __has_feature(cxx_noexcept)
2702
2715
 
2703
2716
  template <class _Tp, class _Arg>
2704
- struct _LIBCPP_TYPE_VIS is_nothrow_assignable
2717
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_assignable
2705
2718
  : public false_type {};
2706
2719
 
2707
2720
  template <class _Tp>
2708
- struct _LIBCPP_TYPE_VIS is_nothrow_assignable<_Tp&, _Tp>
2721
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_assignable<_Tp&, _Tp>
2709
2722
  #if __has_feature(has_nothrow_assign) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2710
2723
  : integral_constant<bool, __has_nothrow_assign(_Tp)> {};
2711
2724
  #else
@@ -2713,7 +2726,7 @@ struct _LIBCPP_TYPE_VIS is_nothrow_assignable<_Tp&, _Tp>
2713
2726
  #endif
2714
2727
 
2715
2728
  template <class _Tp>
2716
- struct _LIBCPP_TYPE_VIS is_nothrow_assignable<_Tp&, _Tp&>
2729
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_assignable<_Tp&, _Tp&>
2717
2730
  #if __has_feature(has_nothrow_assign) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2718
2731
  : integral_constant<bool, __has_nothrow_assign(_Tp)> {};
2719
2732
  #else
@@ -2721,7 +2734,7 @@ struct _LIBCPP_TYPE_VIS is_nothrow_assignable<_Tp&, _Tp&>
2721
2734
  #endif
2722
2735
 
2723
2736
  template <class _Tp>
2724
- struct _LIBCPP_TYPE_VIS is_nothrow_assignable<_Tp&, const _Tp&>
2737
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_assignable<_Tp&, const _Tp&>
2725
2738
  #if __has_feature(has_nothrow_assign) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2726
2739
  : integral_constant<bool, __has_nothrow_assign(_Tp)> {};
2727
2740
  #else
@@ -2744,14 +2757,14 @@ struct is_nothrow_assignable<_Tp&, _Tp&&>
2744
2757
 
2745
2758
  // is_nothrow_copy_assignable
2746
2759
 
2747
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_nothrow_copy_assignable
2760
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_copy_assignable
2748
2761
  : public is_nothrow_assignable<typename add_lvalue_reference<_Tp>::type,
2749
2762
  const typename add_lvalue_reference<_Tp>::type>
2750
2763
  {};
2751
2764
 
2752
2765
  // is_nothrow_move_assignable
2753
2766
 
2754
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_nothrow_move_assignable
2767
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_move_assignable
2755
2768
  : public is_nothrow_assignable<typename add_lvalue_reference<_Tp>::type,
2756
2769
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
2757
2770
  typename add_rvalue_reference<_Tp>::type>
@@ -2779,19 +2792,19 @@ struct __is_nothrow_destructible<true, _Tp>
2779
2792
  };
2780
2793
 
2781
2794
  template <class _Tp>
2782
- struct _LIBCPP_TYPE_VIS is_nothrow_destructible
2795
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_destructible
2783
2796
  : public __is_nothrow_destructible<is_destructible<_Tp>::value, _Tp>
2784
2797
  {
2785
2798
  };
2786
2799
 
2787
2800
  template <class _Tp, size_t _Ns>
2788
- struct _LIBCPP_TYPE_VIS is_nothrow_destructible<_Tp[_Ns]>
2801
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_destructible<_Tp[_Ns]>
2789
2802
  : public is_nothrow_destructible<_Tp>
2790
2803
  {
2791
2804
  };
2792
2805
 
2793
2806
  template <class _Tp>
2794
- struct _LIBCPP_TYPE_VIS is_nothrow_destructible<_Tp&>
2807
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_destructible<_Tp&>
2795
2808
  : public true_type
2796
2809
  {
2797
2810
  };
@@ -2799,7 +2812,7 @@ struct _LIBCPP_TYPE_VIS is_nothrow_destructible<_Tp&>
2799
2812
  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
2800
2813
 
2801
2814
  template <class _Tp>
2802
- struct _LIBCPP_TYPE_VIS is_nothrow_destructible<_Tp&&>
2815
+ struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_destructible<_Tp&&>
2803
2816
  : public true_type
2804
2817
  {
2805
2818
  };
@@ -2812,7 +2825,7 @@ template <class _Tp> struct __libcpp_nothrow_destructor
2812
2825
  : public integral_constant<bool, is_scalar<_Tp>::value ||
2813
2826
  is_reference<_Tp>::value> {};
2814
2827
 
2815
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_nothrow_destructible
2828
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_nothrow_destructible
2816
2829
  : public __libcpp_nothrow_destructor<typename remove_all_extents<_Tp>::type> {};
2817
2830
 
2818
2831
  #endif
@@ -2821,12 +2834,12 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_nothrow_destructible
2821
2834
 
2822
2835
  #if __has_feature(is_pod) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
2823
2836
 
2824
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_pod
2837
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_pod
2825
2838
  : public integral_constant<bool, __is_pod(_Tp)> {};
2826
2839
 
2827
2840
  #else // _LIBCPP_HAS_TYPE_TRAITS
2828
2841
 
2829
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_pod
2842
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_pod
2830
2843
  : public integral_constant<bool, is_trivially_default_constructible<_Tp>::value &&
2831
2844
  is_trivially_copy_constructible<_Tp>::value &&
2832
2845
  is_trivially_copy_assignable<_Tp>::value &&
@@ -2836,7 +2849,7 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_pod
2836
2849
 
2837
2850
  // is_literal_type;
2838
2851
 
2839
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_literal_type
2852
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_literal_type
2840
2853
  #if __has_feature(is_literal)
2841
2854
  : public integral_constant<bool, __is_literal(_Tp)>
2842
2855
  #else
@@ -2847,7 +2860,7 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_literal_type
2847
2860
 
2848
2861
  // is_standard_layout;
2849
2862
 
2850
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_standard_layout
2863
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_standard_layout
2851
2864
  #if __has_feature(is_standard_layout)
2852
2865
  : public integral_constant<bool, __is_standard_layout(_Tp)>
2853
2866
  #else
@@ -2857,7 +2870,7 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_standard_layout
2857
2870
 
2858
2871
  // is_trivially_copyable;
2859
2872
 
2860
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_trivially_copyable
2873
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_trivially_copyable
2861
2874
  #if __has_feature(is_trivially_copyable)
2862
2875
  : public integral_constant<bool, __is_trivially_copyable(_Tp)>
2863
2876
  #else
@@ -2867,7 +2880,7 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS is_trivially_copyable
2867
2880
 
2868
2881
  // is_trivial;
2869
2882
 
2870
- template <class _Tp> struct _LIBCPP_TYPE_VIS is_trivial
2883
+ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_trivial
2871
2884
  #if __has_feature(is_trivial)
2872
2885
  : public integral_constant<bool, __is_trivial(_Tp)>
2873
2886
  #else
@@ -2924,12 +2937,22 @@ struct __check_complete<_Rp (*)(_Param...)>
2924
2937
  {
2925
2938
  };
2926
2939
 
2940
+ template <class ..._Param>
2941
+ struct __check_complete<void (*)(_Param...)>
2942
+ {
2943
+ };
2944
+
2927
2945
  template <class _Rp, class ..._Param>
2928
2946
  struct __check_complete<_Rp (_Param...)>
2929
2947
  : private __check_complete<_Rp>
2930
2948
  {
2931
2949
  };
2932
2950
 
2951
+ template <class ..._Param>
2952
+ struct __check_complete<void (_Param...)>
2953
+ {
2954
+ };
2955
+
2933
2956
  template <class _Rp, class _Class, class ..._Param>
2934
2957
  struct __check_complete<_Rp (_Class::*)(_Param...)>
2935
2958
  : private __check_complete<_Class>
@@ -3124,7 +3147,7 @@ struct __invoke_of
3124
3147
  };
3125
3148
 
3126
3149
  template <class _Fp, class ..._Args>
3127
- class _LIBCPP_TYPE_VIS result_of<_Fp(_Args...)>
3150
+ class _LIBCPP_TYPE_VIS_ONLY result_of<_Fp(_Args...)>
3128
3151
  : public __invoke_of<_Fp, _Args...>
3129
3152
  {
3130
3153
  };
@@ -3243,6 +3266,27 @@ struct underlying_type
3243
3266
 
3244
3267
  #endif // _LIBCXX_UNDERLYING_TYPE
3245
3268
 
3269
+ #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE
3270
+
3271
+ template <class _Tp>
3272
+ struct __has_operator_addressof_imp
3273
+ {
3274
+ template <class>
3275
+ static auto __test(__any) -> false_type;
3276
+ template <class _Up>
3277
+ static auto __test(_Up* __u)
3278
+ -> typename __select_2nd<decltype(__u->operator&()), true_type>::type;
3279
+
3280
+ static const bool value = decltype(__test<_Tp>(nullptr))::value;
3281
+ };
3282
+
3283
+ template <class _Tp>
3284
+ struct __has_operator_addressof
3285
+ : public integral_constant<bool, __has_operator_addressof_imp<_Tp>::value>
3286
+ {};
3287
+
3288
+ #endif // _LIBCPP_HAS_NO_ADVANCED_SFINAE
3289
+
3246
3290
  _LIBCPP_END_NAMESPACE_STD
3247
3291
 
3248
3292
  #endif // _LIBCPP_TYPE_TRAITS