diff options
Diffstat (limited to 'libstdc++-v3/include')
-rw-r--r-- | libstdc++-v3/include/bits/shared_ptr.h | 12 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/std_function.h | 37 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_pair.h | 4 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/array | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/std/array | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/std/functional | 30 | ||||
-rw-r--r-- | libstdc++-v3/include/std/tuple | 13 | ||||
-rw-r--r-- | libstdc++-v3/include/std/valarray | 5 |
8 files changed, 85 insertions, 30 deletions
diff --git a/libstdc++-v3/include/bits/shared_ptr.h b/libstdc++-v3/include/bits/shared_ptr.h index 851f9cf..fe933ff 100644 --- a/libstdc++-v3/include/bits/shared_ptr.h +++ b/libstdc++-v3/include/bits/shared_ptr.h @@ -355,6 +355,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend class weak_ptr<_Tp>; }; +#if __cpp_deduction_guides >= 201606 + template<typename _Tp> + shared_ptr(weak_ptr<_Tp>) -> shared_ptr<_Tp>; + template<typename _Tp, typename _Del> + shared_ptr(unique_ptr<_Tp, _Del>) -> shared_ptr<_Tp>; +#endif + // 20.7.2.2.7 shared_ptr comparisons template<typename _Tp, typename _Up> inline bool @@ -577,6 +584,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return shared_ptr<_Tp>(*this, std::nothrow); } }; +#if __cpp_deduction_guides >= 201606 + template<typename _Tp> + weak_ptr(shared_ptr<_Tp>) -> weak_ptr<_Tp>; +#endif + // 20.7.2.3.6 weak_ptr specialized algorithms. template<typename _Tp> inline void diff --git a/libstdc++-v3/include/bits/std_function.h b/libstdc++-v3/include/bits/std_function.h index 7d77e213..b393a94 100644 --- a/libstdc++-v3/include/bits/std_function.h +++ b/libstdc++-v3/include/bits/std_function.h @@ -629,6 +629,43 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Invoker_type _M_invoker; }; +#if __cpp_deduction_guides >= 201606 + template<typename> + struct __function_guide_helper + { }; + + template<typename _Res, typename _Tp, bool _Nx, typename... _Args> + struct __function_guide_helper< + _Res (_Tp::*) (_Args...) noexcept(_Nx) + > + { using type = _Res(_Args...); }; + + template<typename _Res, typename _Tp, bool _Nx, typename... _Args> + struct __function_guide_helper< + _Res (_Tp::*) (_Args...) & noexcept(_Nx) + > + { using type = _Res(_Args...); }; + + template<typename _Res, typename _Tp, bool _Nx, typename... _Args> + struct __function_guide_helper< + _Res (_Tp::*) (_Args...) const noexcept(_Nx) + > + { using type = _Res(_Args...); }; + + template<typename _Res, typename _Tp, bool _Nx, typename... _Args> + struct __function_guide_helper< + _Res (_Tp::*) (_Args...) const & noexcept(_Nx) + > + { using type = _Res(_Args...); }; + + template<typename _Res, typename... _ArgTypes> + function(_Res(*)(_ArgTypes...)) -> function<_Res(_ArgTypes...)>; + + template<typename _Functor, typename _Signature = typename + __function_guide_helper<decltype(&_Functor::operator())>::type> + function(_Functor) -> function<_Signature>; +#endif + // Out-of-line member definitions. template<typename _Res, typename... _ArgTypes> function<_Res(_ArgTypes...)>:: diff --git a/libstdc++-v3/include/bits/stl_pair.h b/libstdc++-v3/include/bits/stl_pair.h index e5e9f1c..66f52b3 100644 --- a/libstdc++-v3/include/bits/stl_pair.h +++ b/libstdc++-v3/include/bits/stl_pair.h @@ -425,6 +425,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif }; +#if __cpp_deduction_guides >= 201606 + template<typename _T1, typename _T2> pair(_T1, _T2) -> pair<_T1, _T2>; +#endif + /// Two pairs of the same type are equal iff their members are equal. template<typename _T1, typename _T2> inline _GLIBCXX_CONSTEXPR bool diff --git a/libstdc++-v3/include/debug/array b/libstdc++-v3/include/debug/array index 3ff786a..9c27922 100644 --- a/libstdc++-v3/include/debug/array +++ b/libstdc++-v3/include/debug/array @@ -225,6 +225,13 @@ namespace __debug { return _AT_Type::_S_ptr(_M_elems); } }; +#if __cpp_deduction_guides >= 201606 + template<typename _Tp, typename... _Up> + array(_Tp, _Up...) + -> array<std::enable_if_t<(std::is_same_v<_Tp, _Up> && ...), _Tp>, + 1 + sizeof...(_Up)>; +#endif + // Array comparisons. template<typename _Tp, std::size_t _Nm> inline bool diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array index 261f2af..1c7d6dc 100644 --- a/libstdc++-v3/include/std/array +++ b/libstdc++-v3/include/std/array @@ -239,6 +239,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { return _AT_Type::_S_ptr(_M_elems); } }; +#if __cpp_deduction_guides >= 201606 + template<typename _Tp, typename... _Up> + array(_Tp, _Up...) + -> array<enable_if_t<(is_same_v<_Tp, _Up> && ...), _Tp>, + 1 + sizeof...(_Up)>; +#endif + // Array comparisons. template<typename _Tp, std::size_t _Nm> inline bool diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional index ae5bc0a..3db10ca 100644 --- a/libstdc++-v3/include/std/functional +++ b/libstdc++-v3/include/std/functional @@ -1175,36 +1175,6 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) _RAIter _M_pat_end; }; - /// Generator function for default_searcher - template<typename _ForwardIterator, - typename _BinaryPredicate = std::equal_to<>> - inline default_searcher<_ForwardIterator, _BinaryPredicate> - make_default_searcher(_ForwardIterator __pat_first, - _ForwardIterator __pat_last, - _BinaryPredicate __pred = _BinaryPredicate()) - { return { __pat_first, __pat_last, __pred }; } - - /// Generator function for boyer_moore_searcher - template<typename _RAIter, typename _Hash - = std::hash<typename std::iterator_traits<_RAIter>::value_type>, - typename _BinaryPredicate = equal_to<>> - inline boyer_moore_searcher<_RAIter, _Hash, _BinaryPredicate> - make_boyer_moore_searcher(_RAIter __pat_first, _RAIter __pat_last, - _Hash __hf = _Hash(), - _BinaryPredicate __pred = _BinaryPredicate()) - { return { __pat_first, __pat_last, std::move(__hf), std::move(__pred) }; } - - /// Generator function for boyer_moore_horspool_searcher - template<typename _RAIter, typename _Hash - = std::hash<typename std::iterator_traits<_RAIter>::value_type>, - typename _BinaryPredicate = equal_to<>> - inline boyer_moore_horspool_searcher<_RAIter, _Hash, _BinaryPredicate> - make_boyer_moore_horspool_searcher(_RAIter __pat_first, _RAIter __pat_last, - _Hash __hf = _Hash(), - _BinaryPredicate __pred - = _BinaryPredicate()) - { return { __pat_first, __pat_last, std::move(__hf), std::move(__pred) }; } - template<typename _RAIter, typename _Hash, typename _BinaryPredicate> boyer_moore_searcher<_RAIter, _Hash, _BinaryPredicate>:: boyer_moore_searcher(_RAIter __pat, _RAIter __pat_end, diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple index f53daf1..ae495d9 100644 --- a/libstdc++-v3/include/std/tuple +++ b/libstdc++-v3/include/std/tuple @@ -872,6 +872,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { _Inherited::_M_swap(__in); } }; +#if __cpp_deduction_guides >= 201606 + template<typename... _UTypes> + tuple(_UTypes...) -> tuple<_UTypes...>; + template<typename _T1, typename _T2> + tuple(pair<_T1, _T2>) -> tuple<_T1, _T2>; + template<typename _Alloc, typename... _UTypes> + tuple(allocator_arg_t, _Alloc, _UTypes...) -> tuple<_UTypes...>; + template<typename _Alloc, typename _T1, typename _T2> + tuple(allocator_arg_t, _Alloc, pair<_T1, _T2>) -> tuple<_T1, _T2>; + template<typename _Alloc, typename... _UTypes> + tuple(allocator_arg_t, _Alloc, tuple<_UTypes...>) -> tuple<_UTypes...>; +#endif + // Explicit specialization, zero-element tuple. template<> class tuple<> diff --git a/libstdc++-v3/include/std/valarray b/libstdc++-v3/include/std/valarray index ad50650..2dc6e42 100644 --- a/libstdc++-v3/include/std/valarray +++ b/libstdc++-v3/include/std/valarray @@ -563,6 +563,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend class _Array<_Tp>; }; +#if __cpp_deduction_guides >= 201606 + template<typename _Tp, size_t _Nm> + valarray(const _Tp(&)[_Nm], size_t) -> valarray<_Tp>; +#endif + template<typename _Tp> inline const _Tp& valarray<_Tp>::operator[](size_t __i) const |