@@ -35,9 +35,6 @@ class unique_ptr {
3535 T *get () { return ptr; }
3636 unique_ptr<T> &operator =(const unique_ptr &) = delete ;
3737 unique_ptr<T> &operator =(unique_ptr &&) { return *this ; }
38- template <typename T> unique_ptr &operator =(unique_ptr<T> &&) {
39- return *this ;
40- }
4138
4239private:
4340 T *ptr;
@@ -185,107 +182,90 @@ template <typename T1> struct allocator_traits {
185182};
186183
187184// uninitialized_default_construct
188- template <class T1 >
189- void uninitialized_default_construct (T1, T1);
185+ template <class T1 > void uninitialized_default_construct (T1, T1);
190186
191187template <class T1 , class T2 >
192- void uninitialized_default_construct (T1&&, T2, T2);
188+ void uninitialized_default_construct (T1 &&, T2, T2);
193189
194190// uninitialized_default_construct_n
195- template <class T1 , class T2 >
196- T1 uninitialized_default_construct_n (T1, T2);
191+ template <class T1 , class T2 > T1 uninitialized_default_construct_n (T1, T2);
197192
198193template <class T1 , class T2 , class T3 >
199- T2 uninitialized_default_construct_n (T1&&, T2, T3);
194+ T2 uninitialized_default_construct_n (T1 &&, T2, T3);
200195
201196// uninitialized_value_construct
202- template <class T1 >
203- void uninitialized_value_construct (T1, T1);
197+ template <class T1 > void uninitialized_value_construct (T1, T1);
204198
205- template <class T1 , class T2 >
206- void uninitialized_value_construct (T1&&, T2, T2);
199+ template <class T1 , class T2 > void uninitialized_value_construct (T1 &&, T2, T2);
207200
208201// uninitialized_value_construct_n
209- template <class T1 , class T2 >
210- T1 uninitialized_value_construct_n (T1, T2);
202+ template <class T1 , class T2 > T1 uninitialized_value_construct_n (T1, T2);
211203
212204template <class T1 , class T2 , class T3 >
213- T2 uninitialized_value_construct_n (T1&&, T2, T3);
205+ T2 uninitialized_value_construct_n (T1 &&, T2, T3);
214206
215207// uninitialized_copy
216- template <class T1 , class T2 >
217- T2 uninitialized_copy (T1, T1, T2);
208+ template <class T1 , class T2 > T2 uninitialized_copy (T1, T1, T2);
218209
219210template <class T1 , class T2 , class T3 >
220- T3 uninitialized_copy (T1&&, T2, T2, T3);
211+ T3 uninitialized_copy (T1 &&, T2, T2, T3);
221212
222213// uninitialized_copy_n
223- template <class T1 , class T2 , class T3 >
224- T3 uninitialized_copy_n (T1, T2, T3);
214+ template <class T1 , class T2 , class T3 > T3 uninitialized_copy_n (T1, T2, T3);
225215
226216template <class T1 , class T2 , class T3 , class T4 >
227- T4 uninitialized_copy_n (T1&&, T2, T3, T4);
217+ T4 uninitialized_copy_n (T1 &&, T2, T3, T4);
228218
229219// uninitialized_move
230- template <class T1 , class T2 >
231- T2 uninitialized_move (T1, T1, T2);
220+ template <class T1 , class T2 > T2 uninitialized_move (T1, T1, T2);
232221
233222template <class T1 , class T2 , class T3 >
234- T3 uninitialized_move (T1&&, T2, T2, T3);
223+ T3 uninitialized_move (T1 &&, T2, T2, T3);
235224
236225// uninitialized_move_n
237226template <class T1 , class T2 , class T3 >
238227pair<T1, T3> uninitialized_move_n (T1, T2, T3);
239228
240229template <class T1 , class T2 , class T3 , class T4 >
241- pair<T2, T4> uninitialized_move_n (T1&&, T2, T3, T4);
230+ pair<T2, T4> uninitialized_move_n (T1 &&, T2, T3, T4);
242231
243232// uninitialized_fill
244- template <class T1 , class T2 >
245- void uninitialized_fill (T1, T1, const T2&);
233+ template <class T1 , class T2 > void uninitialized_fill (T1, T1, const T2 &);
246234
247235template <class T1 , class T2 , class T3 >
248- void uninitialized_fill (T1&&, T2, T2, const T3&);
236+ void uninitialized_fill (T1 &&, T2, T2, const T3 &);
249237
250238// uninitialized_fill_n
251239template <class T1 , class T2 , class T3 >
252- T1 uninitialized_fill_n (T1, T2, const T3&);
240+ T1 uninitialized_fill_n (T1, T2, const T3 &);
253241
254242template <class T1 , class T2 , class T3 , class T4 >
255- T2 uninitialized_fill_n (T1&&, T2, T3, const T4&);
243+ T2 uninitialized_fill_n (T1 &&, T2, T3, const T4 &);
256244
257245// destroy_at
258- template <class T1 >
259- void destroy_at (T1*);
246+ template <class T1 > void destroy_at (T1 *);
260247
261248// destroy
262- template <class T1 >
263- void destroy (T1, T1);
249+ template <class T1 > void destroy (T1, T1);
264250
265- template <class T1 , class T2 >
266- void destroy (T1&&, T2, T2);
251+ template <class T1 , class T2 > void destroy (T1 &&, T2, T2);
267252
268253// destroy_n
269- template <class T1 , class T2 >
270- T1 destroy_n (T1, T2);
254+ template <class T1 , class T2 > T1 destroy_n (T1, T2);
271255
272- template <class T1 , class T2 , class T3 >
273- T2 destroy_n (T1&&, T2, T3);
256+ template <class T1 , class T2 , class T3 > T2 destroy_n (T1 &&, T2, T3);
274257
275258// launder
276- template <class T1 >
277- constexpr T1* launder (T1*) noexcept ;
259+ template <class T1 > constexpr T1 *launder (T1 *) noexcept ;
278260
279261// get_temporary_buffer / return_temporary_buffer (deprecated in C++17)
280262template <class T >
281263pair<T *, ptrdiff_t > get_temporary_buffer (ptrdiff_t n) noexcept ;
282264
283- template <class T >
284- void return_temporary_buffer (T *p);
265+ template <class T > void return_temporary_buffer (T *p);
285266
286267// raw_storage_iterator (deprecated in C++17)
287- template <class OutputIterator , class T >
288- class raw_storage_iterator {
268+ template <class OutputIterator , class T > class raw_storage_iterator {
289269public:
290270 using iterator_category = output_iterator_tag;
291271 using value_type = void ;
@@ -301,6 +281,16 @@ class raw_storage_iterator {
301281 OutputIterator base () const ;
302282};
303283
284+ template <typename T> class weak_ptr {
285+ public:
286+ weak_ptr ();
287+ weak_ptr (const weak_ptr &);
288+ weak_ptr (weak_ptr &&);
289+ weak_ptr (const shared_ptr<T> &);
290+ };
291+
292+ template <typename T, typename Alloc, typename ... Args>
293+ shared_ptr<T> allocate_shared (const Alloc &, Args &&...);
304294} // namespace std
305295
306296#endif // _GHLIBCPP_MEMORY
0 commit comments