diff options
author | dim <dim@FreeBSD.org> | 2016-05-26 18:52:49 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2016-05-26 18:52:49 +0000 |
commit | 6a450d405601a2fe1ac4163596a9f1f097938a67 (patch) | |
tree | 87163f0ca4abe85acc120b605dcfa6b9c46b29cd /contrib/libc++/include/utility | |
parent | 934ebc933e3692b4690e2a19f92d402a4d7ac84a (diff) | |
parent | fb2ca4532fddc71eec8c0229d53a0b1de52d5af8 (diff) | |
download | FreeBSD-src-6a450d405601a2fe1ac4163596a9f1f097938a67.zip FreeBSD-src-6a450d405601a2fe1ac4163596a9f1f097938a67.tar.gz |
Update libc++ to 3.8.0. Excerpted list of fixes (with upstream revision
numbers):
r242679 Implement the plugin-based version of std::search. There are no
searchers yet; those are coming soon.
r242682 Implement the default searcher for std::experimental::search.
r243728 Add <experimental/any> v2.
r245330 implement more of N4258 - Cleaning up noexcept in the standard
library. Specifically add new noexcept stuff to vector and
string's move-assignment operations
r245334 Fix PR22606 - Leak pthread_key with static storage duration to
ensure all of thread-local destructors are called.
r245335 Fix PR23589: std::function doesn't recognize null pointer to
varargs function.
r247036 Implementation of Boyer-Moore and Boyer-Moore-Horspool
searchers for the LFTS.
r249325 Implement LWG#2063, and update the issues links to point to the
github generated pages
r249738 Split <ctype.h> out of <cctype>.
r249739 Split <errno.h> out of <cerrno>.
r249740 Split <float.h> out of <cfloat>.
r249741 Split <inttypes.h> out of <cinttypes>.
r249742 Split <math.h> out of <cmath>.
r249743 Split <setjmp.h> out of <csetjmp>.
r249761 Split <stddef.h> out of <cstddef>.
r249798 Split <stdio.h> out of <cstdio>.
r249800 Split <stdlib.h> out of <cstdlib>.
r249889 Split <wchar.h> out of <cwchar>.
r249890 Split <wctype.h> out of <cwctype>.
r249929 Split <string.h> out of <cstring>.
r250254 ABI versioning macros for libc++.
r251246 Fix LWG#2244: basic_istream::seekg
r251247 Fix LWG#2127: Move-construction with raw_storage_iterator.
r251253 Fix LWG#2476: scoped_allocator_adaptor is not assignable
r251257 Fix LWG#2489: mem_fn() should be noexcept
r251618 Implement P0004R1 'Remove Deprecated iostreams aliases'
r251766 Implement the first part of P0006R0: Adopt Type Traits Variable
Templates for C++17.
r252195 Implement P0092R1 for C++1z
r252350 Allow deque to handle incomplete types.
r252406 More of P0006R0: type traits variable aliases for C++17.
r252407 Implement LWG#2353: std::next is over-constrained
r252905 Implement P0074: Making owner_less more flexible
r253215 Implement P0013R1: Logical Operator Type Traits.
r253274 Implement P0007: Constant View: A proposal for a std::as_const
helper function template.
r254119 Add static_assert to set/multiset/map/multimap/forward_list/deque
that the allocator's value_type match the container's value_type.
r254283 Implement more of P0006; Type Traits Variable Templates.
r255941 LWG2485: get() should be overloaded for const tuple&&.
r256325 Fix LWG Issue #2367 - Fixing std::tuple and std::pair's default
constructors.
r256652 Fix for ALL undefined behavior in <list>.
r256859 First half of LWG#2354: 'Unnecessary copying when inserting
into maps with braced-init syntax'
Exp-run: antoine
Relnotes: yes
Diffstat (limited to 'contrib/libc++/include/utility')
-rw-r--r-- | contrib/libc++/include/utility | 98 |
1 files changed, 90 insertions, 8 deletions
diff --git a/contrib/libc++/include/utility b/contrib/libc++/include/utility index 54cfc8b..c9f5785 100644 --- a/contrib/libc++/include/utility +++ b/contrib/libc++/include/utility @@ -52,6 +52,9 @@ template <class T> >::type move_if_noexcept(T& x) noexcept; // constexpr in C++14 +template <class T> constexpr add_const<T>_t& as_const(T& t) noexcept; // C++17 +template <class T> void as_const(const T&&) = delete; // C++17 + template <class T> typename add_rvalue_reference<T>::type declval() noexcept; template <class T1, class T2> @@ -110,22 +113,41 @@ template<size_t I, class T1, class T2> get(pair<T1, T2>&) noexcept; // constexpr in C++14 template<size_t I, class T1, class T2> - const typename const tuple_element<I, pair<T1, T2> >::type& + const typename tuple_element<I, pair<T1, T2> >::type& get(const pair<T1, T2>&) noexcept; // constexpr in C++14 template<size_t I, class T1, class T2> typename tuple_element<I, pair<T1, T2> >::type&& get(pair<T1, T2>&&) noexcept; // constexpr in C++14 +template<size_t I, class T1, class T2> + const typename tuple_element<I, pair<T1, T2> >::type&& + get(const pair<T1, T2>&&) noexcept; // constexpr in C++14 + template<class T1, class T2> constexpr T1& get(pair<T1, T2>&) noexcept; // C++14 -template<size_t I, class T1, class T2> - constexpr T1 const& get(pair<T1, T2> const &) noexcept; // C++14 +template<class T1, class T2> + constexpr const T1& get(const pair<T1, T2>&) noexcept; // C++14 -template<size_t I, class T1, class T2> +template<class T1, class T2> constexpr T1&& get(pair<T1, T2>&&) noexcept; // C++14 +template<class T1, class T2> + constexpr const T1&& get(const pair<T1, T2>&&) noexcept; // C++14 + +template<class T1, class T2> + constexpr T1& get(pair<T2, T1>&) noexcept; // C++14 + +template<class T1, class T2> + constexpr const T1& get(const pair<T2, T1>&) noexcept; // C++14 + +template<class T1, class T2> + constexpr T1&& get(pair<T2, T1>&&) noexcept; // C++14 + +template<class T1, class T2> + constexpr const T1&& get(const pair<T2, T1>&&) noexcept; // C++14 + // C++14 template<class T, T... I> @@ -242,6 +264,11 @@ move_if_noexcept(_Tp& __x) _NOEXCEPT return _VSTD::move(__x); } +#if _LIBCPP_STD_VER > 14 +template <class _Tp> constexpr add_const_t<_Tp>& as_const(_Tp& __t) noexcept { return __t; } +template <class _Tp> void as_const(const _Tp&&) = delete; +#endif + struct _LIBCPP_TYPE_VIS_ONLY piecewise_construct_t { }; #if defined(_LIBCPP_HAS_NO_CONSTEXPR) || defined(_LIBCPP_BUILDING_UTILITY) extern const piecewise_construct_t piecewise_construct;// = piecewise_construct_t(); @@ -261,6 +288,12 @@ struct _LIBCPP_TYPE_VIS_ONLY pair // pair(const pair&) = default; // pair(pair&&) = default; +#ifndef _LIBCPP_HAS_NO_DEFAULT_FUNCTION_TEMPLATE_ARGS + template <bool _Dummy = true, class = typename enable_if< + __dependent_type<is_default_constructible<_T1>, _Dummy>::value && + __dependent_type<is_default_constructible<_T2>, _Dummy>::value + >::type> +#endif _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR pair() : first(), second() {} _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 @@ -388,8 +421,9 @@ struct _LIBCPP_TYPE_VIS_ONLY pair swap(pair& __p) _NOEXCEPT_(__is_nothrow_swappable<first_type>::value && __is_nothrow_swappable<second_type>::value) { - _VSTD::iter_swap(&first, &__p.first); - _VSTD::iter_swap(&second, &__p.second); + using _VSTD::swap; + swap(first, __p.first); + swap(second, __p.second); } private: @@ -551,6 +585,12 @@ struct __get_pair<0> _T1&& get(pair<_T1, _T2>&& __p) _NOEXCEPT {return _VSTD::forward<_T1>(__p.first);} + template <class _T1, class _T2> + static + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 + const _T1&& + get(const pair<_T1, _T2>&& __p) _NOEXCEPT {return _VSTD::forward<const _T1>(__p.first);} + #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES }; @@ -577,6 +617,12 @@ struct __get_pair<1> _T2&& get(pair<_T1, _T2>&& __p) _NOEXCEPT {return _VSTD::forward<_T2>(__p.second);} + template <class _T1, class _T2> + static + _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 + const _T2&& + get(const pair<_T1, _T2>&& __p) _NOEXCEPT {return _VSTD::forward<const _T2>(__p.second);} + #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES }; @@ -606,6 +652,14 @@ get(pair<_T1, _T2>&& __p) _NOEXCEPT return __get_pair<_Ip>::get(_VSTD::move(__p)); } +template <size_t _Ip, class _T1, class _T2> +inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 +const typename tuple_element<_Ip, pair<_T1, _T2> >::type&& +get(const pair<_T1, _T2>&& __p) _NOEXCEPT +{ + return __get_pair<_Ip>::get(_VSTD::move(__p)); +} + #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #if _LIBCPP_STD_VER > 11 @@ -632,6 +686,13 @@ constexpr _T1 && get(pair<_T1, _T2>&& __p) _NOEXCEPT template <class _T1, class _T2> inline _LIBCPP_INLINE_VISIBILITY +constexpr _T1 const && get(pair<_T1, _T2> const&& __p) _NOEXCEPT +{ + return __get_pair<0>::get(_VSTD::move(__p)); +} + +template <class _T1, class _T2> +inline _LIBCPP_INLINE_VISIBILITY constexpr _T1 & get(pair<_T2, _T1>& __p) _NOEXCEPT { return __get_pair<1>::get(__p); @@ -651,6 +712,13 @@ constexpr _T1 && get(pair<_T2, _T1>&& __p) _NOEXCEPT return __get_pair<1>::get(_VSTD::move(__p)); } +template <class _T1, class _T2> +inline _LIBCPP_INLINE_VISIBILITY +constexpr _T1 const && get(pair<_T2, _T1> const&& __p) _NOEXCEPT +{ + return __get_pair<1>::get(_VSTD::move(__p)); +} + #endif #if _LIBCPP_STD_VER > 11 @@ -671,6 +739,16 @@ struct _LIBCPP_TYPE_VIS_ONLY integer_sequence template<size_t... _Ip> using index_sequence = integer_sequence<size_t, _Ip...>; +#if __has_builtin(__make_integer_seq) && !defined(_LIBCPP_TESTING_FALLBACK_MAKE_INTEGER_SEQUENCE) + +template <class _Tp, _Tp _Ep> +struct __make_integer_sequence +{ + typedef __make_integer_seq<integer_sequence, _Tp, _Ep> type; +}; + +#else + namespace __detail { template<typename _Tp, size_t ..._Extra> struct __repeat; @@ -724,10 +802,14 @@ struct __make_integer_sequence { static_assert(is_integral<_Tp>::value, "std::make_integer_sequence can only be instantiated with an integral type" ); - static_assert(0 <= _Ep, "std::make_integer_sequence input shall not be negative"); - typedef __make_integer_sequence_unchecked<_Tp, _Ep> type; + static_assert(0 <= _Ep, "std::make_integer_sequence must have a non-negative sequence length"); + // Workaround GCC bug by preventing bad installations when 0 <= _Ep + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68929 + typedef __make_integer_sequence_unchecked<_Tp, 0 <= _Ep ? _Ep : 0> type; }; +#endif + template<class _Tp, _Tp _Np> using make_integer_sequence = typename __make_integer_sequence<_Tp, _Np>::type; |