From owner-svn-src-all@freebsd.org Fri Jan 6 20:13:57 2017 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C4665CA2D9C; Fri, 6 Jan 2017 20:13:57 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5203C1D7B; Fri, 6 Jan 2017 20:13:57 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v06KDus4068634; Fri, 6 Jan 2017 20:13:56 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v06KDsX4068614; Fri, 6 Jan 2017 20:13:54 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201701062013.v06KDsX4068614@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Fri, 6 Jan 2017 20:13:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r311538 - in vendor/libc++/dist: cmake/Modules docs/DesignDocs include include/experimental include/ext src src/experimental src/include test/libcxx/test test/libcxx/utilities/memory/ut... X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jan 2017 20:13:57 -0000 Author: dim Date: Fri Jan 6 20:13:54 2017 New Revision: 311538 URL: https://svnweb.freebsd.org/changeset/base/311538 Log: Vendor import of libc++ trunk r291274: https://llvm.org/svn/llvm-project/libcxx/trunk@291274 Added: vendor/libc++/dist/test/libcxx/utilities/memory/util.dynamic.safety/ vendor/libc++/dist/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp (contents, props changed) vendor/libc++/dist/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_new_abi.pass.cpp (contents, props changed) vendor/libc++/dist/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_incomplete.fail.cpp (contents, props changed) vendor/libc++/dist/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_incomplete.pass.cpp (contents, props changed) vendor/libc++/dist/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_structured_bindings.pass.cpp (contents, props changed) vendor/libc++/dist/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_value_sfinae.pass.cpp (contents, props changed) Modified: vendor/libc++/dist/cmake/Modules/HandleLibCXXABI.cmake vendor/libc++/dist/docs/DesignDocs/VisibilityMacros.rst vendor/libc++/dist/include/__config vendor/libc++/dist/include/__debug vendor/libc++/dist/include/__functional_03 vendor/libc++/dist/include/__functional_base vendor/libc++/dist/include/__hash_table vendor/libc++/dist/include/__locale vendor/libc++/dist/include/__mutex_base vendor/libc++/dist/include/__nullptr vendor/libc++/dist/include/__string vendor/libc++/dist/include/__threading_support vendor/libc++/dist/include/__tree vendor/libc++/dist/include/__tuple vendor/libc++/dist/include/any vendor/libc++/dist/include/array vendor/libc++/dist/include/bitset vendor/libc++/dist/include/chrono vendor/libc++/dist/include/codecvt vendor/libc++/dist/include/complex vendor/libc++/dist/include/deque vendor/libc++/dist/include/experimental/any vendor/libc++/dist/include/experimental/dynarray vendor/libc++/dist/include/experimental/memory_resource vendor/libc++/dist/include/experimental/optional vendor/libc++/dist/include/experimental/string_view vendor/libc++/dist/include/experimental/type_traits vendor/libc++/dist/include/experimental/utility vendor/libc++/dist/include/ext/__hash vendor/libc++/dist/include/ext/hash_map vendor/libc++/dist/include/ext/hash_set vendor/libc++/dist/include/forward_list vendor/libc++/dist/include/fstream vendor/libc++/dist/include/functional vendor/libc++/dist/include/future vendor/libc++/dist/include/initializer_list vendor/libc++/dist/include/ios vendor/libc++/dist/include/iosfwd vendor/libc++/dist/include/istream vendor/libc++/dist/include/iterator vendor/libc++/dist/include/limits vendor/libc++/dist/include/list vendor/libc++/dist/include/locale vendor/libc++/dist/include/map vendor/libc++/dist/include/memory vendor/libc++/dist/include/mutex vendor/libc++/dist/include/optional vendor/libc++/dist/include/ostream vendor/libc++/dist/include/queue vendor/libc++/dist/include/random vendor/libc++/dist/include/ratio vendor/libc++/dist/include/regex vendor/libc++/dist/include/scoped_allocator vendor/libc++/dist/include/set vendor/libc++/dist/include/sstream vendor/libc++/dist/include/stack vendor/libc++/dist/include/streambuf vendor/libc++/dist/include/string vendor/libc++/dist/include/string_view vendor/libc++/dist/include/system_error vendor/libc++/dist/include/thread vendor/libc++/dist/include/tuple vendor/libc++/dist/include/type_traits vendor/libc++/dist/include/typeindex vendor/libc++/dist/include/typeinfo vendor/libc++/dist/include/unordered_map vendor/libc++/dist/include/unordered_set vendor/libc++/dist/include/utility vendor/libc++/dist/include/valarray vendor/libc++/dist/include/variant vendor/libc++/dist/include/vector vendor/libc++/dist/src/experimental/memory_resource.cpp vendor/libc++/dist/src/include/config_elast.h vendor/libc++/dist/src/memory.cpp vendor/libc++/dist/src/mutex.cpp vendor/libc++/dist/test/libcxx/test/config.py vendor/libc++/dist/test/libcxx/utilities/variant/variant.variant/variant.assign/copy.pass.cpp vendor/libc++/dist/test/libcxx/utilities/variant/variant.variant/variant.assign/move.pass.cpp vendor/libc++/dist/test/libcxx/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp vendor/libc++/dist/test/libcxx/utilities/variant/variant.variant/variant.ctor/move.pass.cpp vendor/libc++/dist/test/std/utilities/memory/util.dynamic.safety/get_pointer_safety.pass.cpp vendor/libc++/dist/test/std/utilities/time/time.duration/time.duration.arithmetic/op_++.pass.cpp vendor/libc++/dist/test/std/utilities/time/time.duration/time.duration.arithmetic/op_++int.pass.cpp vendor/libc++/dist/test/std/utilities/time/time.duration/time.duration.arithmetic/op_+=.pass.cpp vendor/libc++/dist/test/std/utilities/time/time.duration/time.duration.arithmetic/op_--.pass.cpp vendor/libc++/dist/test/std/utilities/time/time.duration/time.duration.arithmetic/op_--int.pass.cpp vendor/libc++/dist/test/std/utilities/time/time.duration/time.duration.arithmetic/op_-=.pass.cpp vendor/libc++/dist/test/std/utilities/time/time.duration/time.duration.arithmetic/op_divide=.pass.cpp vendor/libc++/dist/test/std/utilities/time/time.duration/time.duration.arithmetic/op_mod=duration.pass.cpp vendor/libc++/dist/test/std/utilities/time/time.duration/time.duration.arithmetic/op_mod=rep.pass.cpp vendor/libc++/dist/test/std/utilities/time/time.duration/time.duration.arithmetic/op_times=.pass.cpp vendor/libc++/dist/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size.pass.cpp vendor/libc++/dist/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp vendor/libc++/dist/test/std/utilities/variant/variant.variant/variant.status/valueless_by_exception.pass.cpp vendor/libc++/dist/test/std/utilities/variant/variant.variant/variant.swap/swap.pass.cpp vendor/libc++/dist/www/cxx1z_status.html Modified: vendor/libc++/dist/cmake/Modules/HandleLibCXXABI.cmake ============================================================================== --- vendor/libc++/dist/cmake/Modules/HandleLibCXXABI.cmake Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/cmake/Modules/HandleLibCXXABI.cmake Fri Jan 6 20:13:54 2017 (r311538) @@ -10,7 +10,10 @@ # abidefines: A list of defines needed to compile libc++ with the ABI library # abilib : The ABI library to link against. # abifiles : A list of files (which may be relative paths) to copy into the -# libc++ build tree for the build. These files will also be +# libc++ build tree for the build. These files will be copied +# twice: once into include/, so the libc++ build itself can find +# them, and once into include/c++/v1, so that a clang built into +# the same build area will find them. These files will also be # installed alongside the libc++ headers. # abidirs : A list of relative paths to create under an include directory # in the libc++ build directory. @@ -31,8 +34,10 @@ macro(setup_abi_lib abidefines abilib ab # The place in the build tree where we store out-of-source headers. set(LIBCXX_BUILD_HEADERS_ROOT "${CMAKE_BINARY_DIR}/include/c++-build") file(MAKE_DIRECTORY "${LIBCXX_BUILD_HEADERS_ROOT}") + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/include/c++/v1") foreach(_d ${abidirs}) file(MAKE_DIRECTORY "${LIBCXX_BUILD_HEADERS_ROOT}/${_d}") + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/include/c++/v1/${_d}") endforeach() foreach(fpath ${LIBCXX_ABILIB_FILES}) @@ -45,6 +50,9 @@ macro(setup_abi_lib abidefines abilib ab file(COPY "${incpath}/${fpath}" DESTINATION "${LIBCXX_BUILD_HEADERS_ROOT}/${dstdir}" ) + file(COPY "${incpath}/${fpath}" + DESTINATION "${CMAKE_BINARY_DIR}/include/c++/v1/${dstdir}" + ) if (LIBCXX_INSTALL_HEADERS) install(FILES "${LIBCXX_BUILD_HEADERS_ROOT}/${fpath}" DESTINATION include/c++/v1/${dstdir} Modified: vendor/libc++/dist/docs/DesignDocs/VisibilityMacros.rst ============================================================================== --- vendor/libc++/dist/docs/DesignDocs/VisibilityMacros.rst Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/docs/DesignDocs/VisibilityMacros.rst Fri Jan 6 20:13:54 2017 (r311538) @@ -49,13 +49,13 @@ Visibility Macros attribute. With GCC the `visibility(...)` attribute is used and member functions are affected. -**_LIBCPP_TYPE_VIS_ONLY** - The same as `_LIBCPP_TYPE_VIS` except that it may be applied to templates. +**_LIBCPP_TEMPLATE_ONLY** + The same as `_LIBCPP_TYPE_VIS` except that it may be applied to class + templates. **Windows Behavior**: DLLs do not support dllimport/export on class templates. The macro has an empty definition on this platform. - Note: This macro should be renamed `_LIBCPP_TEMPLATE_TYPE_VIS`. **_LIBCPP_ENUM_VIS** Mark the typeinfo of an enum as having default visibility. This attribute @@ -74,14 +74,15 @@ Visibility Macros a `_LIBCPP_EXTERN_TEMPLATE` declaration as being exported by the libc++ library. This attribute must be specified on all extern class template declarations. - This macro is used to override the `_LIBCPP_TYPE_VIS_ONLY` attribute + This macro is used to override the `_LIBCPP_TEMPLATE_VIS` attribute specified on the primary template and to export the member functions produced by the explicit instantiation in the dylib. **GCC Behavior**: GCC ignores visibility attributes applied the type in extern template declarations and applying an attribute results in a warning. - However since `_LIBCPP_TYPE_VIS_ONLY` is the same as `_LIBCPP_TYPE_VIS` the - visibility is already correct. The macro has an empty definition with GCC. + However since `_LIBCPP_TEMPLATE_VIS` is the same as + `__attribute__((visibility("default"))` the visibility is already correct. + The macro has an empty definition with GCC. **Windows Behavior**: `extern template` and `dllexport` are fundamentally incompatible *on a template class* on Windows; the former suppresses Modified: vendor/libc++/dist/include/__config ============================================================================== --- vendor/libc++/dist/include/__config Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/__config Fri Jan 6 20:13:54 2017 (r311538) @@ -52,6 +52,11 @@ // provided under the alternate keyword __nullptr, which changes the mangling // of nullptr_t. This option is ABI incompatible with GCC in C++03 mode. #define _LIBCPP_ABI_ALWAYS_USE_CXX11_NULLPTR +// Define the `pointer_safety` enum as a C++11 strongly typed enumeration +// instead of as a class simulating an enum. If this option is enabled +// `pointer_safety` and `get_pointer_safety()` will no longer be available +// in C++03. +#define _LIBCPP_ABI_POINTER_SAFETY_ENUM_TYPE #elif _LIBCPP_ABI_VERSION == 1 #if !defined(_WIN32) // Enable compiling a definition of error_category() into the libc++ dylib. @@ -557,7 +562,7 @@ namespace std { #define _LIBCPP_FUNC_VIS _LIBCPP_DLL_VIS #define _LIBCPP_EXCEPTION_ABI _LIBCPP_DLL_VIS #define _LIBCPP_HIDDEN -#define _LIBCPP_TYPE_VIS_ONLY +#define _LIBCPP_TEMPLATE_VIS #define _LIBCPP_FUNC_VIS_ONLY #define _LIBCPP_ENUM_VIS @@ -600,8 +605,8 @@ namespace std { # endif #endif -#ifndef _LIBCPP_TYPE_VIS_ONLY -# define _LIBCPP_TYPE_VIS_ONLY _LIBCPP_TYPE_VIS +#ifndef _LIBCPP_TEMPLATE_VIS +# define _LIBCPP_TEMPLATE_VIS _LIBCPP_TYPE_VIS #endif #ifndef _LIBCPP_FUNC_VIS_ONLY Modified: vendor/libc++/dist/include/__debug ============================================================================== --- vendor/libc++/dist/include/__debug Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/__debug Fri Jan 6 20:13:54 2017 (r311538) @@ -56,7 +56,7 @@ class _LIBCPP_EXCEPTION_ABI __libcpp_deb _LIBCPP_BEGIN_NAMESPACE_STD -struct _LIBCPP_TYPE_VIS_ONLY __libcpp_debug_info { +struct _LIBCPP_TEMPLATE_VIS __libcpp_debug_info { _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR __libcpp_debug_info() : __file_(nullptr), __line_(-1), __pred_(nullptr), __msg_(nullptr) {} Modified: vendor/libc++/dist/include/__functional_03 ============================================================================== --- vendor/libc++/dist/include/__functional_03 Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/__functional_03 Fri Jan 6 20:13:54 2017 (r311538) @@ -445,7 +445,7 @@ __func<_Fp, _Alloc, _Rp(_A0, _A1, _A2)>: } // __function template -class _LIBCPP_TYPE_VIS_ONLY function<_Rp()> +class _LIBCPP_TEMPLATE_VIS function<_Rp()> { typedef __function::__base<_Rp()> __base; aligned_storage<3*sizeof(void*)>::type __buf_; @@ -720,7 +720,7 @@ function<_Rp()>::target() const #endif // _LIBCPP_NO_RTTI template -class _LIBCPP_TYPE_VIS_ONLY function<_Rp(_A0)> +class _LIBCPP_TEMPLATE_VIS function<_Rp(_A0)> : public unary_function<_A0, _Rp> { typedef __function::__base<_Rp(_A0)> __base; @@ -996,7 +996,7 @@ function<_Rp(_A0)>::target() const #endif // _LIBCPP_NO_RTTI template -class _LIBCPP_TYPE_VIS_ONLY function<_Rp(_A0, _A1)> +class _LIBCPP_TEMPLATE_VIS function<_Rp(_A0, _A1)> : public binary_function<_A0, _A1, _Rp> { typedef __function::__base<_Rp(_A0, _A1)> __base; @@ -1272,7 +1272,7 @@ function<_Rp(_A0, _A1)>::target() const #endif // _LIBCPP_NO_RTTI template -class _LIBCPP_TYPE_VIS_ONLY function<_Rp(_A0, _A1, _A2)> +class _LIBCPP_TEMPLATE_VIS function<_Rp(_A0, _A1, _A2)> { typedef __function::__base<_Rp(_A0, _A1, _A2)> __base; aligned_storage<3*sizeof(void*)>::type __buf_; Modified: vendor/libc++/dist/include/__functional_base ============================================================================== --- vendor/libc++/dist/include/__functional_base Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/__functional_base Fri Jan 6 20:13:54 2017 (r311538) @@ -24,14 +24,14 @@ _LIBCPP_BEGIN_NAMESPACE_STD template -struct _LIBCPP_TYPE_VIS_ONLY unary_function +struct _LIBCPP_TEMPLATE_VIS unary_function { typedef _Arg argument_type; typedef _Result result_type; }; template -struct _LIBCPP_TYPE_VIS_ONLY binary_function +struct _LIBCPP_TEMPLATE_VIS binary_function { typedef _Arg1 first_argument_type; typedef _Arg2 second_argument_type; @@ -54,7 +54,7 @@ template #else template #endif -struct _LIBCPP_TYPE_VIS_ONLY less : binary_function<_Tp, _Tp, bool> +struct _LIBCPP_TEMPLATE_VIS less : binary_function<_Tp, _Tp, bool> { _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp& __x, const _Tp& __y) const @@ -63,7 +63,7 @@ struct _LIBCPP_TYPE_VIS_ONLY less : bina #if _LIBCPP_STD_VER > 11 template <> -struct _LIBCPP_TYPE_VIS_ONLY less +struct _LIBCPP_TEMPLATE_VIS less { template _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY @@ -382,7 +382,7 @@ struct __invoke_void_return_wrapper -class _LIBCPP_TYPE_VIS_ONLY reference_wrapper +class _LIBCPP_TEMPLATE_VIS reference_wrapper : public __weak_result_type<_Tp> { public: @@ -585,7 +585,7 @@ public: // allocator_arg_t -struct _LIBCPP_TYPE_VIS_ONLY allocator_arg_t { }; +struct _LIBCPP_TEMPLATE_VIS allocator_arg_t { }; #if defined(_LIBCPP_HAS_NO_CONSTEXPR) || defined(_LIBCPP_BUILDING_MEMORY) extern const allocator_arg_t allocator_arg; @@ -620,7 +620,7 @@ struct __uses_allocator<_Tp, _Alloc, fal }; template -struct _LIBCPP_TYPE_VIS_ONLY uses_allocator +struct _LIBCPP_TEMPLATE_VIS uses_allocator : public __uses_allocator<_Tp, _Alloc> { }; Modified: vendor/libc++/dist/include/__hash_table ============================================================================== --- vendor/libc++/dist/include/__hash_table Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/__hash_table Fri Jan 6 20:13:54 2017 (r311538) @@ -133,12 +133,12 @@ __next_hash_pow2(size_t __n) template class __hash_table; -template class _LIBCPP_TYPE_VIS_ONLY __hash_iterator; -template class _LIBCPP_TYPE_VIS_ONLY __hash_const_iterator; -template class _LIBCPP_TYPE_VIS_ONLY __hash_local_iterator; -template class _LIBCPP_TYPE_VIS_ONLY __hash_const_local_iterator; -template class _LIBCPP_TYPE_VIS_ONLY __hash_map_iterator; -template class _LIBCPP_TYPE_VIS_ONLY __hash_map_const_iterator; +template class _LIBCPP_TEMPLATE_VIS __hash_iterator; +template class _LIBCPP_TEMPLATE_VIS __hash_const_iterator; +template class _LIBCPP_TEMPLATE_VIS __hash_local_iterator; +template class _LIBCPP_TEMPLATE_VIS __hash_const_local_iterator; +template class _LIBCPP_TEMPLATE_VIS __hash_map_iterator; +template class _LIBCPP_TEMPLATE_VIS __hash_map_const_iterator; template struct __hash_key_value_types { @@ -285,7 +285,7 @@ struct __make_hash_node_types { }; template -class _LIBCPP_TYPE_VIS_ONLY __hash_iterator +class _LIBCPP_TEMPLATE_VIS __hash_iterator { typedef __hash_node_types<_NodePtr> _NodeTypes; typedef _NodePtr __node_pointer; @@ -384,14 +384,14 @@ private: {} #endif template friend class __hash_table; - template friend class _LIBCPP_TYPE_VIS_ONLY __hash_const_iterator; - template friend class _LIBCPP_TYPE_VIS_ONLY __hash_map_iterator; - template friend class _LIBCPP_TYPE_VIS_ONLY unordered_map; - template friend class _LIBCPP_TYPE_VIS_ONLY unordered_multimap; + template friend class _LIBCPP_TEMPLATE_VIS __hash_const_iterator; + template friend class _LIBCPP_TEMPLATE_VIS __hash_map_iterator; + template friend class _LIBCPP_TEMPLATE_VIS unordered_map; + template friend class _LIBCPP_TEMPLATE_VIS unordered_multimap; }; template -class _LIBCPP_TYPE_VIS_ONLY __hash_const_iterator +class _LIBCPP_TEMPLATE_VIS __hash_const_iterator { static_assert(!is_const::element_type>::value, ""); typedef __hash_node_types<_NodePtr> _NodeTypes; @@ -500,13 +500,13 @@ private: {} #endif template friend class __hash_table; - template friend class _LIBCPP_TYPE_VIS_ONLY __hash_map_const_iterator; - template friend class _LIBCPP_TYPE_VIS_ONLY unordered_map; - template friend class _LIBCPP_TYPE_VIS_ONLY unordered_multimap; + template friend class _LIBCPP_TEMPLATE_VIS __hash_map_const_iterator; + template friend class _LIBCPP_TEMPLATE_VIS unordered_map; + template friend class _LIBCPP_TEMPLATE_VIS unordered_multimap; }; template -class _LIBCPP_TYPE_VIS_ONLY __hash_local_iterator +class _LIBCPP_TEMPLATE_VIS __hash_local_iterator { typedef __hash_node_types<_NodePtr> _NodeTypes; typedef _NodePtr __node_pointer; @@ -624,12 +624,12 @@ private: } #endif template friend class __hash_table; - template friend class _LIBCPP_TYPE_VIS_ONLY __hash_const_local_iterator; - template friend class _LIBCPP_TYPE_VIS_ONLY __hash_map_iterator; + template friend class _LIBCPP_TEMPLATE_VIS __hash_const_local_iterator; + template friend class _LIBCPP_TEMPLATE_VIS __hash_map_iterator; }; template -class _LIBCPP_TYPE_VIS_ONLY __hash_const_local_iterator +class _LIBCPP_TEMPLATE_VIS __hash_const_local_iterator { typedef __hash_node_types<_ConstNodePtr> _NodeTypes; typedef _ConstNodePtr __node_pointer; @@ -765,7 +765,7 @@ private: } #endif template friend class __hash_table; - template friend class _LIBCPP_TYPE_VIS_ONLY __hash_map_const_iterator; + template friend class _LIBCPP_TEMPLATE_VIS __hash_map_const_iterator; }; template @@ -1324,8 +1324,8 @@ private: void __deallocate(__next_pointer __np) _NOEXCEPT; __next_pointer __detach() _NOEXCEPT; - template friend class _LIBCPP_TYPE_VIS_ONLY unordered_map; - template friend class _LIBCPP_TYPE_VIS_ONLY unordered_multimap; + template friend class _LIBCPP_TEMPLATE_VIS unordered_map; + template friend class _LIBCPP_TEMPLATE_VIS unordered_multimap; }; template Modified: vendor/libc++/dist/include/__locale ============================================================================== --- vendor/libc++/dist/include/__locale Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/__locale Fri Jan 6 20:13:54 2017 (r311538) @@ -190,7 +190,7 @@ use_facet(const locale& __l) // template class collate; template -class _LIBCPP_TYPE_VIS_ONLY collate +class _LIBCPP_TEMPLATE_VIS collate : public locale::facet { public: @@ -274,7 +274,7 @@ _LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_E // template class collate_byname; -template class _LIBCPP_TYPE_VIS_ONLY collate_byname; +template class _LIBCPP_TEMPLATE_VIS collate_byname; template <> class _LIBCPP_TYPE_VIS collate_byname @@ -425,7 +425,7 @@ public: _LIBCPP_ALWAYS_INLINE ctype_base() {} }; -template class _LIBCPP_TYPE_VIS_ONLY ctype; +template class _LIBCPP_TEMPLATE_VIS ctype; template <> class _LIBCPP_TYPE_VIS ctype @@ -652,7 +652,7 @@ protected: // template class ctype_byname; -template class _LIBCPP_TYPE_VIS_ONLY ctype_byname; +template class _LIBCPP_TEMPLATE_VIS ctype_byname; template <> class _LIBCPP_TYPE_VIS ctype_byname @@ -813,7 +813,7 @@ public: // template class codecvt; -template class _LIBCPP_TYPE_VIS_ONLY codecvt; +template class _LIBCPP_TEMPLATE_VIS codecvt; // template <> class codecvt @@ -1159,7 +1159,7 @@ protected: // template class codecvt_byname template -class _LIBCPP_TYPE_VIS_ONLY codecvt_byname +class _LIBCPP_TEMPLATE_VIS codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> { public: @@ -1367,7 +1367,7 @@ struct __widen_from_utf8<32> // template class numpunct -template class _LIBCPP_TYPE_VIS_ONLY numpunct; +template class _LIBCPP_TEMPLATE_VIS numpunct; template <> class _LIBCPP_TYPE_VIS numpunct @@ -1433,7 +1433,7 @@ protected: // template class numpunct_byname -template class _LIBCPP_TYPE_VIS_ONLY numpunct_byname; +template class _LIBCPP_TEMPLATE_VIS numpunct_byname; template <> class _LIBCPP_TYPE_VIS numpunct_byname Modified: vendor/libc++/dist/include/__mutex_base ============================================================================== --- vendor/libc++/dist/include/__mutex_base Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/__mutex_base Fri Jan 6 20:13:54 2017 (r311538) @@ -85,11 +85,11 @@ constexpr adopt_lock_t adopt_lock = ad // the mangling consistent between dialects. #if defined(_LIBCPP_ABI_VARIADIC_LOCK_GUARD) template -class _LIBCPP_TYPE_VIS_ONLY lock_guard; +class _LIBCPP_TEMPLATE_VIS lock_guard; #endif template -class _LIBCPP_TYPE_VIS_ONLY _LIBCPP_THREAD_SAFETY_ANNOTATION(scoped_lockable) +class _LIBCPP_TEMPLATE_VIS _LIBCPP_THREAD_SAFETY_ANNOTATION(scoped_lockable) #if !defined(_LIBCPP_ABI_VARIADIC_LOCK_GUARD) lock_guard #else @@ -118,7 +118,7 @@ private: }; template -class _LIBCPP_TYPE_VIS_ONLY unique_lock +class _LIBCPP_TEMPLATE_VIS unique_lock { public: typedef _Mutex mutex_type; Modified: vendor/libc++/dist/include/__nullptr ============================================================================== --- vendor/libc++/dist/include/__nullptr Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/__nullptr Fri Jan 6 20:13:54 2017 (r311538) @@ -21,7 +21,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD -struct _LIBCPP_TYPE_VIS_ONLY nullptr_t +struct _LIBCPP_TEMPLATE_VIS nullptr_t { void* __lx; Modified: vendor/libc++/dist/include/__string ============================================================================== --- vendor/libc++/dist/include/__string Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/__string Fri Jan 6 20:13:54 2017 (r311538) @@ -69,7 +69,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD // char_traits template -struct _LIBCPP_TYPE_VIS_ONLY char_traits +struct _LIBCPP_TEMPLATE_VIS char_traits { typedef _CharT char_type; typedef int int_type; @@ -192,7 +192,7 @@ char_traits<_CharT>::assign(char_type* _ // char_traits template <> -struct _LIBCPP_TYPE_VIS_ONLY char_traits +struct _LIBCPP_TEMPLATE_VIS char_traits { typedef char char_type; typedef int int_type; @@ -237,7 +237,7 @@ struct _LIBCPP_TYPE_VIS_ONLY char_traits // char_traits template <> -struct _LIBCPP_TYPE_VIS_ONLY char_traits +struct _LIBCPP_TEMPLATE_VIS char_traits { typedef wchar_t char_type; typedef wint_t int_type; @@ -283,7 +283,7 @@ struct _LIBCPP_TYPE_VIS_ONLY char_traits #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS template <> -struct _LIBCPP_TYPE_VIS_ONLY char_traits +struct _LIBCPP_TEMPLATE_VIS char_traits { typedef char16_t char_type; typedef uint_least16_t int_type; @@ -402,7 +402,7 @@ char_traits::assign(char_type* } template <> -struct _LIBCPP_TYPE_VIS_ONLY char_traits +struct _LIBCPP_TEMPLATE_VIS char_traits { typedef char32_t char_type; typedef uint_least32_t int_type; Modified: vendor/libc++/dist/include/__threading_support ============================================================================== --- vendor/libc++/dist/include/__threading_support Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/__threading_support Fri Jan 6 20:13:54 2017 (r311538) @@ -63,6 +63,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD typedef pthread_mutex_t __libcpp_mutex_t; #define _LIBCPP_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER +typedef pthread_mutex_t __libcpp_recursive_mutex_t; + // Condition Variable typedef pthread_cond_t __libcpp_condvar_t; #define _LIBCPP_CONDVAR_INITIALIZER PTHREAD_COND_INITIALIZER @@ -83,7 +85,19 @@ typedef pthread_key_t __libcpp_tls_key; // Mutex _LIBCPP_THREAD_ABI_VISIBILITY -int __libcpp_recursive_mutex_init(__libcpp_mutex_t *__m); +int __libcpp_recursive_mutex_init(__libcpp_recursive_mutex_t *__m); + +_LIBCPP_THREAD_ABI_VISIBILITY +int __libcpp_recursive_mutex_lock(__libcpp_recursive_mutex_t *__m); + +_LIBCPP_THREAD_ABI_VISIBILITY +int __libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t *__m); + +_LIBCPP_THREAD_ABI_VISIBILITY +int __libcpp_recursive_mutex_unlock(__libcpp_recursive_mutex_t *__m); + +_LIBCPP_THREAD_ABI_VISIBILITY +int __libcpp_recursive_mutex_destroy(__libcpp_recursive_mutex_t *__m); _LIBCPP_THREAD_ABI_VISIBILITY int __libcpp_mutex_lock(__libcpp_mutex_t *__m); @@ -164,7 +178,7 @@ int __libcpp_tls_set(__libcpp_tls_key __ #if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) || \ defined(_LIBCPP_BUILDING_THREAD_API_EXTERNAL_PTHREAD) -int __libcpp_recursive_mutex_init(__libcpp_mutex_t *__m) +int __libcpp_recursive_mutex_init(__libcpp_recursive_mutex_t *__m) { pthread_mutexattr_t attr; int __ec = pthread_mutexattr_init(&attr); @@ -188,6 +202,26 @@ int __libcpp_recursive_mutex_init(__libc return 0; } +int __libcpp_recursive_mutex_lock(__libcpp_recursive_mutex_t *__m) +{ + return pthread_mutex_lock(__m); +} + +int __libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t *__m) +{ + return pthread_mutex_trylock(__m); +} + +int __libcpp_recursive_mutex_unlock(__libcpp_mutex_t *__m) +{ + return pthread_mutex_unlock(__m); +} + +int __libcpp_recursive_mutex_destroy(__libcpp_recursive_mutex_t *__m) +{ + return pthread_mutex_destroy(__m); +} + int __libcpp_mutex_lock(__libcpp_mutex_t *__m) { return pthread_mutex_lock(__m); Modified: vendor/libc++/dist/include/__tree ============================================================================== --- vendor/libc++/dist/include/__tree Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/__tree Fri Jan 6 20:13:54 2017 (r311538) @@ -25,9 +25,9 @@ _LIBCPP_BEGIN_NAMESPACE_STD template class __tree; template - class _LIBCPP_TYPE_VIS_ONLY __tree_iterator; + class _LIBCPP_TEMPLATE_VIS __tree_iterator; template - class _LIBCPP_TYPE_VIS_ONLY __tree_const_iterator; + class _LIBCPP_TEMPLATE_VIS __tree_const_iterator; template class __tree_end_node; template class __tree_node_base; @@ -42,8 +42,8 @@ struct __value_type; #endif template class __map_node_destructor; -template class _LIBCPP_TYPE_VIS_ONLY __map_iterator; -template class _LIBCPP_TYPE_VIS_ONLY __map_const_iterator; +template class _LIBCPP_TEMPLATE_VIS __map_iterator; +template class _LIBCPP_TEMPLATE_VIS __map_const_iterator; /* @@ -797,7 +797,7 @@ public: template -class _LIBCPP_TYPE_VIS_ONLY __tree_iterator +class _LIBCPP_TEMPLATE_VIS __tree_iterator { typedef __tree_node_types<_NodePtr> _NodeTypes; typedef _NodePtr __node_pointer; @@ -861,16 +861,16 @@ private: _LIBCPP_INLINE_VISIBILITY __node_pointer __get_np() const { return static_cast<__node_pointer>(__ptr_); } template friend class __tree; - template friend class _LIBCPP_TYPE_VIS_ONLY __tree_const_iterator; - template friend class _LIBCPP_TYPE_VIS_ONLY __map_iterator; - template friend class _LIBCPP_TYPE_VIS_ONLY map; - template friend class _LIBCPP_TYPE_VIS_ONLY multimap; - template friend class _LIBCPP_TYPE_VIS_ONLY set; - template friend class _LIBCPP_TYPE_VIS_ONLY multiset; + template friend class _LIBCPP_TEMPLATE_VIS __tree_const_iterator; + template friend class _LIBCPP_TEMPLATE_VIS __map_iterator; + template friend class _LIBCPP_TEMPLATE_VIS map; + template friend class _LIBCPP_TEMPLATE_VIS multimap; + template friend class _LIBCPP_TEMPLATE_VIS set; + template friend class _LIBCPP_TEMPLATE_VIS multiset; }; template -class _LIBCPP_TYPE_VIS_ONLY __tree_const_iterator +class _LIBCPP_TEMPLATE_VIS __tree_const_iterator { typedef __tree_node_types<_NodePtr> _NodeTypes; typedef typename _NodeTypes::__node_pointer __node_pointer; @@ -947,11 +947,11 @@ private: __node_pointer __get_np() const { return static_cast<__node_pointer>(__ptr_); } template friend class __tree; - template friend class _LIBCPP_TYPE_VIS_ONLY map; - template friend class _LIBCPP_TYPE_VIS_ONLY multimap; - template friend class _LIBCPP_TYPE_VIS_ONLY set; - template friend class _LIBCPP_TYPE_VIS_ONLY multiset; - template friend class _LIBCPP_TYPE_VIS_ONLY __map_const_iterator; + template friend class _LIBCPP_TEMPLATE_VIS map; + template friend class _LIBCPP_TEMPLATE_VIS multimap; + template friend class _LIBCPP_TEMPLATE_VIS set; + template friend class _LIBCPP_TEMPLATE_VIS multiset; + template friend class _LIBCPP_TEMPLATE_VIS __map_const_iterator; }; @@ -1397,10 +1397,17 @@ private: __node_base_pointer& __find_leaf(const_iterator __hint, __parent_pointer& __parent, const key_type& __v); + // FIXME: Make this function const qualified. Unfortunetly doing so + // breaks existing code which uses non-const callable comparators. template __node_base_pointer& __find_equal(__parent_pointer& __parent, const _Key& __v); template + _LIBCPP_INLINE_VISIBILITY __node_base_pointer& + __find_equal(__parent_pointer& __parent, const _Key& __v) const { + return const_cast<__tree*>(this)->__find_equal(__parent, __v); + } + template __node_base_pointer& __find_equal(const_iterator __hint, __parent_pointer& __parent, __node_base_pointer& __dummy, @@ -1453,8 +1460,8 @@ private: __node_pointer __detach(); static __node_pointer __detach(__node_pointer); - template friend class _LIBCPP_TYPE_VIS_ONLY map; - template friend class _LIBCPP_TYPE_VIS_ONLY multimap; + template friend class _LIBCPP_TEMPLATE_VIS map; + template friend class _LIBCPP_TEMPLATE_VIS multimap; }; template Modified: vendor/libc++/dist/include/__tuple ============================================================================== --- vendor/libc++/dist/include/__tuple Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/__tuple Fri Jan 6 20:13:54 2017 (r311538) @@ -22,51 +22,56 @@ _LIBCPP_BEGIN_NAMESPACE_STD -template class _LIBCPP_TYPE_VIS_ONLY tuple_size; +template class _LIBCPP_TEMPLATE_VIS tuple_size; -struct __empty_tuple_size_base {}; - -template -struct __tuple_size_base_type { - typedef __empty_tuple_size_base type; -}; +#if !defined(_LIBCPP_CXX03_LANG) +template +using __enable_if_tuple_size_imp = _Tp; template -struct __tuple_size_base_type<_Tp, typename __void_t::value)>::type> -{ - typedef integral_constant::value> type; -}; +class _LIBCPP_TEMPLATE_VIS tuple_size<__enable_if_tuple_size_imp< + const _Tp, + typename enable_if::value>::type, + integral_constant)>>> + : public integral_constant::value> {}; template -class _LIBCPP_TYPE_VIS_ONLY tuple_size - : public __tuple_size_base_type<_Tp>::type {}; +class _LIBCPP_TEMPLATE_VIS tuple_size<__enable_if_tuple_size_imp< + volatile _Tp, + typename enable_if::value>::type, + integral_constant)>>> + : public integral_constant::value> {}; template -class _LIBCPP_TYPE_VIS_ONLY tuple_size - : public __tuple_size_base_type<_Tp>::type {}; +class _LIBCPP_TEMPLATE_VIS tuple_size<__enable_if_tuple_size_imp< + const volatile _Tp, + integral_constant)>>> + : public integral_constant::value> {}; -template -class _LIBCPP_TYPE_VIS_ONLY tuple_size - : public __tuple_size_base_type<_Tp>::type {}; +#else +template class _LIBCPP_TEMPLATE_VIS tuple_size : public tuple_size<_Tp> {}; +template class _LIBCPP_TEMPLATE_VIS tuple_size : public tuple_size<_Tp> {}; +template class _LIBCPP_TEMPLATE_VIS tuple_size : public tuple_size<_Tp> {}; +#endif -template class _LIBCPP_TYPE_VIS_ONLY tuple_element; +template class _LIBCPP_TEMPLATE_VIS tuple_element; template -class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, const _Tp> +class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const _Tp> { public: typedef typename add_const::type>::type type; }; template -class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, volatile _Tp> +class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, volatile _Tp> { public: typedef typename add_volatile::type>::type type; }; template -class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, const volatile _Tp> +class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const volatile _Tp> { public: typedef typename add_cv::type>::type type; @@ -155,12 +160,12 @@ struct __make_tuple_indices }; -template class _LIBCPP_TYPE_VIS_ONLY tuple; +template class _LIBCPP_TEMPLATE_VIS tuple; template struct __tuple_like > : true_type {}; template -class _LIBCPP_TYPE_VIS_ONLY tuple_size > +class _LIBCPP_TEMPLATE_VIS tuple_size > : public integral_constant { }; @@ -214,7 +219,7 @@ get(const pair<_T1, _T2>&&) _NOEXCEPT; // array specializations -template struct _LIBCPP_TYPE_VIS_ONLY array; +template struct _LIBCPP_TEMPLATE_VIS array; template struct __tuple_like > : true_type {}; @@ -277,7 +282,7 @@ using __type_pack_element = typename dec #endif template -class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, __tuple_types<_Types...>> +class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, __tuple_types<_Types...>> { public: static_assert(_Ip < sizeof...(_Types), "tuple_element index out of range"); @@ -286,7 +291,7 @@ public: template -class _LIBCPP_TYPE_VIS_ONLY tuple_size<__tuple_types<_Tp...> > +class _LIBCPP_TEMPLATE_VIS tuple_size<__tuple_types<_Tp...> > : public integral_constant { }; @@ -452,7 +457,7 @@ struct __tuple_assignable<_Tp, _Up, true template -class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, tuple<_Tp...> > +class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, tuple<_Tp...> > { public: typedef typename tuple_element<_Ip, __tuple_types<_Tp...> >::type type; Modified: vendor/libc++/dist/include/any ============================================================================== --- vendor/libc++/dist/include/any Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/any Fri Jan 6 20:13:54 2017 (r311538) @@ -113,7 +113,7 @@ void __throw_bad_any_cast() } // Forward declarations -class _LIBCPP_TYPE_VIS_ONLY any; +class _LIBCPP_TEMPLATE_VIS any; template _LIBCPP_INLINE_VISIBILITY @@ -148,7 +148,7 @@ namespace __any_imp template struct _LargeHandler; template - struct _LIBCPP_TYPE_VIS_ONLY __unique_typeinfo { static constexpr int __id = 0; }; + struct _LIBCPP_TEMPLATE_VIS __unique_typeinfo { static constexpr int __id = 0; }; template constexpr int __unique_typeinfo<_Tp>::__id; template @@ -176,7 +176,7 @@ namespace __any_imp } // namespace __any_imp -class _LIBCPP_TYPE_VIS_ONLY any +class _LIBCPP_TEMPLATE_VIS any { public: // construct/destruct @@ -338,7 +338,7 @@ private: namespace __any_imp { template - struct _LIBCPP_TYPE_VIS_ONLY _SmallHandler + struct _LIBCPP_TEMPLATE_VIS _SmallHandler { _LIBCPP_INLINE_VISIBILITY static void* __handle(_Action __act, any const * __this, any * __other, @@ -412,7 +412,7 @@ namespace __any_imp }; template - struct _LIBCPP_TYPE_VIS_ONLY _LargeHandler + struct _LIBCPP_TEMPLATE_VIS _LargeHandler { _LIBCPP_INLINE_VISIBILITY static void* __handle(_Action __act, any const * __this, Modified: vendor/libc++/dist/include/array ============================================================================== --- vendor/libc++/dist/include/array Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/array Fri Jan 6 20:13:54 2017 (r311538) @@ -116,7 +116,7 @@ template c _LIBCPP_BEGIN_NAMESPACE_STD template -struct _LIBCPP_TYPE_VIS_ONLY array +struct _LIBCPP_TEMPLATE_VIS array { // types: typedef array __self; @@ -284,11 +284,11 @@ swap(array<_Tp, _Size>& __x, array<_Tp, } template -class _LIBCPP_TYPE_VIS_ONLY tuple_size > +class _LIBCPP_TEMPLATE_VIS tuple_size > : public integral_constant {}; template -class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, array<_Tp, _Size> > +class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, array<_Tp, _Size> > { public: typedef _Tp type; Modified: vendor/libc++/dist/include/bitset ============================================================================== --- vendor/libc++/dist/include/bitset Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/bitset Fri Jan 6 20:13:54 2017 (r311538) @@ -646,11 +646,11 @@ __bitset<0, 0>::__bitset(unsigned long l { } -template class _LIBCPP_TYPE_VIS_ONLY bitset; +template class _LIBCPP_TEMPLATE_VIS bitset; template struct hash >; template -class _LIBCPP_TYPE_VIS_ONLY bitset +class _LIBCPP_TEMPLATE_VIS bitset : private __bitset<_Size == 0 ? 0 : (_Size - 1) / (sizeof(size_t) * CHAR_BIT) + 1, _Size> { public: @@ -1072,7 +1072,7 @@ operator^(const bitset<_Size>& __x, cons } template -struct _LIBCPP_TYPE_VIS_ONLY hash > +struct _LIBCPP_TEMPLATE_VIS hash > : public unary_function, size_t> { _LIBCPP_INLINE_VISIBILITY Modified: vendor/libc++/dist/include/chrono ============================================================================== --- vendor/libc++/dist/include/chrono Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/chrono Fri Jan 6 20:13:54 2017 (r311538) @@ -77,13 +77,13 @@ public: constexpr duration operator+() const; constexpr duration operator-() const; - duration& operator++(); - duration operator++(int); - duration& operator--(); - duration operator--(int); + constexpr duration& operator++(); + constexpr duration operator++(int); + constexpr duration& operator--(); + constexpr duration operator--(int); - duration& operator+=(const duration& d); - duration& operator-=(const duration& d); + constexpr duration& operator+=(const duration& d); + constexpr duration& operator-=(const duration& d); duration& operator*=(const rep& rhs); duration& operator/=(const rep& rhs); @@ -316,7 +316,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD namespace chrono { -template > class _LIBCPP_TYPE_VIS_ONLY duration; +template > class _LIBCPP_TEMPLATE_VIS duration; template struct __is_duration : false_type {}; @@ -336,7 +336,7 @@ struct __is_duration -struct _LIBCPP_TYPE_VIS_ONLY common_type, +struct _LIBCPP_TEMPLATE_VIS common_type, chrono::duration<_Rep2, _Period2> > { typedef chrono::duration::type, @@ -414,7 +414,7 @@ duration_cast(const duration<_Rep, _Peri } template -struct _LIBCPP_TYPE_VIS_ONLY treat_as_floating_point : is_floating_point<_Rep> {}; +struct _LIBCPP_TEMPLATE_VIS treat_as_floating_point : is_floating_point<_Rep> {}; #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES) template _LIBCPP_CONSTEXPR bool treat_as_floating_point_v @@ -422,7 +422,7 @@ template _LIBCPP_CONSTEXPR #endif template -struct _LIBCPP_TYPE_VIS_ONLY duration_values +struct _LIBCPP_TEMPLATE_VIS duration_values { public: _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR _Rep zero() {return _Rep(0);} @@ -485,7 +485,7 @@ round(const duration<_Rep, _Period>& __d // duration template -class _LIBCPP_TYPE_VIS_ONLY duration +class _LIBCPP_TEMPLATE_VIS duration { static_assert(!__is_duration<_Rep>::value, "A duration representation can not be a duration"); static_assert(__is_ratio<_Period>::value, "Second template parameter of duration must be a std::ratio"); @@ -567,18 +567,18 @@ public: _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR duration operator+() const {return *this;} _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR duration operator-() const {return duration(-__rep_);} - _LIBCPP_INLINE_VISIBILITY duration& operator++() {++__rep_; return *this;} - _LIBCPP_INLINE_VISIBILITY duration operator++(int) {return duration(__rep_++);} - _LIBCPP_INLINE_VISIBILITY duration& operator--() {--__rep_; return *this;} - _LIBCPP_INLINE_VISIBILITY duration operator--(int) {return duration(__rep_--);} - - _LIBCPP_INLINE_VISIBILITY duration& operator+=(const duration& __d) {__rep_ += __d.count(); return *this;} - _LIBCPP_INLINE_VISIBILITY duration& operator-=(const duration& __d) {__rep_ -= __d.count(); return *this;} - - _LIBCPP_INLINE_VISIBILITY duration& operator*=(const rep& rhs) {__rep_ *= rhs; return *this;} - _LIBCPP_INLINE_VISIBILITY duration& operator/=(const rep& rhs) {__rep_ /= rhs; return *this;} - _LIBCPP_INLINE_VISIBILITY duration& operator%=(const rep& rhs) {__rep_ %= rhs; return *this;} - _LIBCPP_INLINE_VISIBILITY duration& operator%=(const duration& rhs) {__rep_ %= rhs.count(); return *this;} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 duration& operator++() {++__rep_; return *this;} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 duration operator++(int) {return duration(__rep_++);} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 duration& operator--() {--__rep_; return *this;} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 duration operator--(int) {return duration(__rep_--);} + + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 duration& operator+=(const duration& __d) {__rep_ += __d.count(); return *this;} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 duration& operator-=(const duration& __d) {__rep_ -= __d.count(); return *this;} + + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 duration& operator*=(const rep& rhs) {__rep_ *= rhs; return *this;} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 duration& operator/=(const rep& rhs) {__rep_ /= rhs; return *this;} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 duration& operator%=(const rep& rhs) {__rep_ %= rhs; return *this;} + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 duration& operator%=(const duration& rhs) {__rep_ %= rhs.count(); return *this;} // special values @@ -828,7 +828,7 @@ operator%(const duration<_Rep1, _Period1 ////////////////////////////////////////////////////////// template -class _LIBCPP_TYPE_VIS_ONLY time_point +class _LIBCPP_TEMPLATE_VIS time_point { static_assert(__is_duration<_Duration>::value, "Second template parameter of time_point must be a std::chrono::duration"); @@ -872,7 +872,7 @@ public: } // chrono template -struct _LIBCPP_TYPE_VIS_ONLY common_type, +struct _LIBCPP_TEMPLATE_VIS common_type, chrono::time_point<_Clock, _Duration2> > { typedef chrono::time_point<_Clock, typename common_type<_Duration1, _Duration2>::type> type; Modified: vendor/libc++/dist/include/codecvt ============================================================================== --- vendor/libc++/dist/include/codecvt Fri Jan 6 20:13:50 2017 (r311537) +++ vendor/libc++/dist/include/codecvt Fri Jan 6 20:13:54 2017 (r311538) *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***