aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/include')
-rw-r--r--libstdc++-v3/include/bits/shared_ptr.h12
-rw-r--r--libstdc++-v3/include/bits/std_function.h37
-rw-r--r--libstdc++-v3/include/bits/stl_pair.h4
-rw-r--r--libstdc++-v3/include/debug/array7
-rw-r--r--libstdc++-v3/include/std/array7
-rw-r--r--libstdc++-v3/include/std/functional30
-rw-r--r--libstdc++-v3/include/std/tuple13
-rw-r--r--libstdc++-v3/include/std/valarray5
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