| This patch was generated from the headers installed by MacPorts |
| gcc-4.4 on OS X 10.6. You can apply it there with |
| `cd /opt/local/include/gcc44/c++ ; sudo patch -p1 <this_patch`, or similar |
| on other operating systems. Mail cfe-dev if you find other problems in the |
| standard headers. |
| |
| This patch is offered under the same modified GPLv3 as libstdc++-4.4. |
| |
| diff -ur a/bits/forward_list.h b/bits/forward_list.h |
| --- a/bits/forward_list.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/forward_list.h 2011-05-02 23:51:33.000000000 -0700 |
| @@ -983,7 +983,7 @@ |
| * function. |
| */ |
| void |
| - swap(forward_list&& __list) |
| + swap(forward_list& __list) |
| { _Node_base::swap(this->_M_impl._M_head, __list._M_impl._M_head); } |
| |
| /** |
| diff -ur a/bits/move.h b/bits/move.h |
| --- a/bits/move.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/move.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -48,13 +48,35 @@ |
| |
| template<typename _Tp> |
| inline _Tp&& |
| - forward(typename std::identity<_Tp>::type&& __t) |
| + forward(typename std::remove_reference<_Tp>::type& __t) |
| +#ifdef __clang__ |
| + { return static_cast<_Tp&&>(__t); } |
| +#else |
| { return __t; } |
| +#endif |
| + |
| + template<typename _Tp> |
| + inline _Tp&& |
| + forward(typename std::remove_reference<_Tp>::type&& __t) |
| + { |
| +#ifdef __clang__ |
| + static_assert(!std::is_lvalue_reference<_Tp>::value, |
| + "Can't instantiate this forward() with an" |
| + " lvalue reference type."); |
| + return static_cast<_Tp&&>(__t); |
| +#else |
| + return __t; |
| +#endif |
| + } |
| |
| template<typename _Tp> |
| inline typename std::remove_reference<_Tp>::type&& |
| move(_Tp&& __t) |
| +#ifdef __clang__ |
| + { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); } |
| +#else |
| { return __t; } |
| +#endif |
| |
| _GLIBCXX_END_NAMESPACE |
| |
| diff -ur a/bits/shared_ptr.h b/bits/shared_ptr.h |
| --- a/bits/shared_ptr.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/shared_ptr.h 2011-03-31 16:40:45.000000000 -0700 |
| @@ -833,7 +833,7 @@ |
| { return _M_refcount._M_get_use_count(); } |
| |
| void |
| - swap(__shared_ptr<_Tp, _Lp>&& __other) // never throws |
| + swap(__shared_ptr<_Tp, _Lp>& __other) // never throws |
| { |
| std::swap(_M_ptr, __other._M_ptr); |
| _M_refcount._M_swap(__other._M_refcount); |
| @@ -943,16 +943,6 @@ |
| swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b) |
| { __a.swap(__b); } |
| |
| - template<typename _Tp, _Lock_policy _Lp> |
| - inline void |
| - swap(__shared_ptr<_Tp, _Lp>&& __a, __shared_ptr<_Tp, _Lp>& __b) |
| - { __a.swap(__b); } |
| - |
| - template<typename _Tp, _Lock_policy _Lp> |
| - inline void |
| - swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>&& __b) |
| - { __a.swap(__b); } |
| - |
| // 2.2.3.9 shared_ptr casts |
| /** @warning The seemingly equivalent |
| * <code>shared_ptr<_Tp, _Lp>(static_cast<_Tp*>(__r.get()))</code> |
| @@ -1372,16 +1362,6 @@ |
| swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b) |
| { __a.swap(__b); } |
| |
| - template<typename _Tp> |
| - inline void |
| - swap(shared_ptr<_Tp>&& __a, shared_ptr<_Tp>& __b) |
| - { __a.swap(__b); } |
| - |
| - template<typename _Tp> |
| - inline void |
| - swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>&& __b) |
| - { __a.swap(__b); } |
| - |
| // 20.8.13.2.10 shared_ptr casts. |
| template<typename _Tp, typename _Tp1> |
| inline shared_ptr<_Tp> |
| diff -ur a/bits/stl_bvector.h b/bits/stl_bvector.h |
| --- a/bits/stl_bvector.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_bvector.h 2011-05-02 23:34:46.000000000 -0700 |
| @@ -743,11 +743,7 @@ |
| } |
| |
| void |
| -#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| - swap(vector&& __x) |
| -#else |
| swap(vector& __x) |
| -#endif |
| { |
| std::swap(this->_M_impl._M_start, __x._M_impl._M_start); |
| std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish); |
| diff -ur a/bits/stl_deque.h b/bits/stl_deque.h |
| --- a/bits/stl_deque.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_deque.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -1395,11 +1395,7 @@ |
| * std::swap(d1,d2) will feed to this function. |
| */ |
| void |
| -#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| - swap(deque&& __x) |
| -#else |
| swap(deque& __x) |
| -#endif |
| { |
| std::swap(this->_M_impl._M_start, __x._M_impl._M_start); |
| std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish); |
| diff -ur a/bits/stl_iterator.h b/bits/stl_iterator.h |
| --- a/bits/stl_iterator.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_iterator.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -913,7 +913,7 @@ |
| |
| reference |
| operator*() const |
| - { return *_M_current; } |
| + { return std::move(*_M_current); } |
| |
| pointer |
| operator->() const |
| diff -ur a/bits/stl_list.h b/bits/stl_list.h |
| --- a/bits/stl_list.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_list.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -1106,11 +1106,7 @@ |
| * function. |
| */ |
| void |
| -#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| - swap(list&& __x) |
| -#else |
| swap(list& __x) |
| -#endif |
| { |
| _List_node_base::swap(this->_M_impl._M_node, __x._M_impl._M_node); |
| |
| @@ -1160,6 +1156,12 @@ |
| } |
| } |
| |
| +#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| + void |
| + splice(iterator __position, list& __x) |
| + { splice(__position, std::move(__x)); } |
| +#endif |
| + |
| /** |
| * @brief Insert element from another %list. |
| * @param position Iterator referencing the element to insert before. |
| @@ -1187,6 +1189,12 @@ |
| this->_M_transfer(__position, __i, __j); |
| } |
| |
| +#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| + void |
| + splice(iterator __position, list& __x, iterator __i) |
| + { splice(__position, std::move(__x), __i); } |
| +#endif |
| + |
| /** |
| * @brief Insert range from another %list. |
| * @param position Iterator referencing the element to insert before. |
| @@ -1217,6 +1225,13 @@ |
| } |
| } |
| |
| +#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| + void |
| + splice(iterator __position, list& __x, iterator __first, |
| + iterator __last) |
| + { splice(__position, std::move(__x), __first, __last); } |
| +#endif |
| + |
| /** |
| * @brief Remove all elements equal to value. |
| * @param value The value to remove. |
| @@ -1287,6 +1302,10 @@ |
| void |
| #ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| merge(list&& __x); |
| + |
| + void |
| + merge(list& __x) |
| + { merge(std::move(__x)); } |
| #else |
| merge(list& __x); |
| #endif |
| @@ -1307,6 +1326,11 @@ |
| void |
| #ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| merge(list&&, _StrictWeakOrdering); |
| + |
| + template<typename _StrictWeakOrdering> |
| + void |
| + merge(list& __l, _StrictWeakOrdering __comp) |
| + { merge(std::move(__l), __comp); } |
| #else |
| merge(list&, _StrictWeakOrdering); |
| #endif |
| diff -ur a/bits/stl_map.h b/bits/stl_map.h |
| --- a/bits/stl_map.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_map.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -608,11 +608,7 @@ |
| * that std::swap(m1,m2) will feed to this function. |
| */ |
| void |
| -#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| - swap(map&& __x) |
| -#else |
| swap(map& __x) |
| -#endif |
| { _M_t.swap(__x._M_t); } |
| |
| /** |
| diff -ur a/bits/stl_multimap.h b/bits/stl_multimap.h |
| --- a/bits/stl_multimap.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_multimap.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -544,11 +544,7 @@ |
| * std::swap(m1,m2) will feed to this function. |
| */ |
| void |
| -#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| - swap(multimap&& __x) |
| -#else |
| swap(multimap& __x) |
| -#endif |
| { _M_t.swap(__x._M_t); } |
| |
| /** |
| diff -ur a/bits/stl_multiset.h b/bits/stl_multiset.h |
| --- a/bits/stl_multiset.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_multiset.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -376,11 +376,7 @@ |
| * std::swap(s1,s2) will feed to this function. |
| */ |
| void |
| -#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| - swap(multiset&& __x) |
| -#else |
| swap(multiset& __x) |
| -#endif |
| { _M_t.swap(__x._M_t); } |
| |
| // insert/erase |
| diff -ur a/bits/stl_pair.h b/bits/stl_pair.h |
| --- a/bits/stl_pair.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_pair.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -84,10 +84,21 @@ |
| : first(__a), second(__b) { } |
| |
| #ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| - template<class _U1, class _U2> |
| + template<class _U1, class = typename |
| + std::enable_if<std::is_convertible<_U1, _T1>::value>::type> |
| + pair(_U1&& __x, const _T2& __y) |
| + : first(std::forward<_U1>(__x)), second(__y) { } |
| + |
| + template<class _U2, class = typename |
| + std::enable_if<std::is_convertible<_U2, _T2>::value>::type> |
| + pair(const _T1& __x, _U2&& __y) |
| + : first(__x), second(std::forward<_U2>(__y)) { } |
| + |
| + template<class _U1, class _U2, class = typename |
| + std::enable_if<std::is_convertible<_U1, _T1>::value |
| + && std::is_convertible<_U2, _T2>::value>::type> |
| pair(_U1&& __x, _U2&& __y) |
| - : first(std::forward<_U1>(__x)), |
| - second(std::forward<_U2>(__y)) { } |
| + : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { } |
| |
| pair(pair&& __p) |
| : first(std::move(__p.first)), |
| @@ -107,11 +118,19 @@ |
| second(std::move(__p.second)) { } |
| |
| // http://gcc.gnu.org/ml/libstdc++/2007-08/msg00052.html |
| + |
| +#if 0 |
| + // This constructor is incompatible with libstdc++-4.6, and it |
| + // interferes with passing NULL pointers to the 2-argument |
| + // constructors, so we disable it. map::emplace isn't |
| + // implemented in libstdc++-4.4 anyway, and that's what this |
| + // constructor was here for. |
| template<class _U1, class _Arg0, class... _Args> |
| pair(_U1&& __x, _Arg0&& __arg0, _Args&&... __args) |
| : first(std::forward<_U1>(__x)), |
| second(std::forward<_Arg0>(__arg0), |
| std::forward<_Args>(__args)...) { } |
| +#endif |
| |
| pair& |
| operator=(pair&& __p) |
| @@ -131,7 +150,7 @@ |
| } |
| |
| void |
| - swap(pair&& __p) |
| + swap(pair& __p) |
| { |
| using std::swap; |
| swap(first, __p.first); |
| diff -ur a/bits/stl_queue.h b/bits/stl_queue.h |
| --- a/bits/stl_queue.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_queue.h 2011-05-02 23:36:15.000000000 -0700 |
| @@ -249,7 +249,7 @@ |
| |
| #ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| void |
| - swap(queue&& __q) |
| + swap(queue& __q) |
| { c.swap(__q.c); } |
| #endif |
| }; |
| @@ -550,7 +550,7 @@ |
| |
| #ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| void |
| - swap(priority_queue&& __pq) |
| + swap(priority_queue& __pq) |
| { |
| using std::swap; |
| c.swap(__pq.c); |
| diff -ur a/bits/stl_set.h b/bits/stl_set.h |
| --- a/bits/stl_set.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_set.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -383,11 +383,7 @@ |
| * std::swap(s1,s2) will feed to this function. |
| */ |
| void |
| -#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| - swap(set&& __x) |
| -#else |
| swap(set& __x) |
| -#endif |
| { _M_t.swap(__x._M_t); } |
| |
| // insert/erase |
| diff -ur a/bits/stl_stack.h b/bits/stl_stack.h |
| --- a/bits/stl_stack.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_stack.h 2011-05-02 23:36:36.000000000 -0700 |
| @@ -213,7 +213,7 @@ |
| |
| #ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| void |
| - swap(stack&& __s) |
| + swap(stack& __s) |
| { c.swap(__s.c); } |
| #endif |
| }; |
| diff -ur a/bits/stl_tree.h b/bits/stl_tree.h |
| --- a/bits/stl_tree.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_tree.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -675,11 +675,7 @@ |
| { return _M_get_Node_allocator().max_size(); } |
| |
| void |
| -#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| - swap(_Rb_tree&& __t); |
| -#else |
| swap(_Rb_tree& __t); |
| -#endif |
| |
| // Insert/erase. |
| pair<iterator, bool> |
| @@ -1104,11 +1100,7 @@ |
| typename _Compare, typename _Alloc> |
| void |
| _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: |
| -#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| - swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&& __t) |
| -#else |
| swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __t) |
| -#endif |
| { |
| if (_M_root() == 0) |
| { |
| diff -ur a/bits/stl_vector.h b/bits/stl_vector.h |
| --- a/bits/stl_vector.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/stl_vector.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -923,11 +923,7 @@ |
| * std::swap(v1,v2) will feed to this function. |
| */ |
| void |
| -#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| - swap(vector&& __x) |
| -#else |
| swap(vector& __x) |
| -#endif |
| { |
| std::swap(this->_M_impl._M_start, __x._M_impl._M_start); |
| std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish); |
| diff -ur a/bits/unique_ptr.h b/bits/unique_ptr.h |
| --- a/bits/unique_ptr.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/bits/unique_ptr.h 2011-03-31 16:40:45.000000000 -0700 |
| @@ -204,7 +204,7 @@ |
| } |
| |
| void |
| - swap(unique_ptr&& __u) |
| + swap(unique_ptr& __u) |
| { |
| using std::swap; |
| swap(_M_t, __u._M_t); |
| @@ -350,7 +350,7 @@ |
| void reset(_Up) = delete; |
| |
| void |
| - swap(unique_ptr&& __u) |
| + swap(unique_ptr& __u) |
| { |
| using std::swap; |
| swap(_M_t, __u._M_t); |
| @@ -389,18 +389,6 @@ |
| unique_ptr<_Tp, _Tp_Deleter>& __y) |
| { __x.swap(__y); } |
| |
| - template<typename _Tp, typename _Tp_Deleter> |
| - inline void |
| - swap(unique_ptr<_Tp, _Tp_Deleter>&& __x, |
| - unique_ptr<_Tp, _Tp_Deleter>& __y) |
| - { __x.swap(__y); } |
| - |
| - template<typename _Tp, typename _Tp_Deleter> |
| - inline void |
| - swap(unique_ptr<_Tp, _Tp_Deleter>& __x, |
| - unique_ptr<_Tp, _Tp_Deleter>&& __y) |
| - { __x.swap(__y); } |
| - |
| template<typename _Tp, typename _Tp_Deleter, |
| typename _Up, typename _Up_Deleter> |
| inline bool |
| diff -ur a/exception_ptr.h b/exception_ptr.h |
| --- a/exception_ptr.h 2011-03-15 14:49:08.000000000 -0700 |
| +++ b/exception_ptr.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -140,7 +140,7 @@ |
| friend bool |
| operator==(const exception_ptr&, const exception_ptr&) throw(); |
| |
| - const type_info* |
| + const class type_info* |
| __cxa_exception_type() const throw(); |
| }; |
| |
| diff -ur a/ext/algorithm b/ext/algorithm |
| --- a/ext/algorithm 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/ext/algorithm 2011-03-29 10:33:39.000000000 -0700 |
| @@ -423,6 +423,9 @@ |
| __out_last - __out_first); |
| } |
| |
| +#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| + using std::is_heap; |
| +#else |
| /** |
| * This is an SGI extension. |
| * @ingroup SGIextensions |
| @@ -462,6 +465,7 @@ |
| |
| return std::__is_heap(__first, __comp, __last - __first); |
| } |
| +#endif |
| |
| // is_sorted, a predicated testing whether a range is sorted in |
| // nondescending order. This is an extension, not part of the C++ |
| diff -ur a/ext/vstring.h b/ext/vstring.h |
| --- a/ext/vstring.h 2011-03-15 14:49:05.000000000 -0700 |
| +++ b/ext/vstring.h 2011-03-29 10:33:39.000000000 -0700 |
| @@ -152,7 +152,7 @@ |
| * string. |
| */ |
| __versa_string(__versa_string&& __str) |
| - : __vstring_base(std::forward<__vstring_base>(__str)) { } |
| + : __vstring_base(std::move(__str)) { } |
| |
| /** |
| * @brief Construct string from an initializer list. |
| @@ -1439,11 +1439,7 @@ |
| * constant time. |
| */ |
| void |
| -#ifdef __GXX_EXPERIMENTAL_CXX0X__ |
| - swap(__versa_string&& __s) |
| -#else |
| swap(__versa_string& __s) |
| -#endif |
| { this->_M_swap(__s); } |
| |
| // String operations: |
| diff -ur a/tr1_impl/hashtable b/tr1_impl/hashtable |
| --- a/tr1_impl/hashtable 2011-03-15 14:49:07.000000000 -0700 |
| +++ b/tr1_impl/hashtable 2011-05-02 23:41:55.000000000 -0700 |
| @@ -225,11 +225,7 @@ |
| |
| ~_Hashtable(); |
| |
| -#ifdef _GLIBCXX_INCLUDE_AS_CXX0X |
| - void swap(_Hashtable&&); |
| -#else |
| void swap(_Hashtable&); |
| -#endif |
| |
| // Basic container operations |
| iterator |
| @@ -732,11 +728,7 @@ |
| void |
| _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, |
| _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: |
| -#ifdef _GLIBCXX_INCLUDE_AS_CXX0X |
| - swap(_Hashtable&& __x) |
| -#else |
| swap(_Hashtable& __x) |
| -#endif |
| { |
| // The only base class with member variables is hash_code_base. We |
| // define _Hash_code_base::_M_swap because different specializations |
| diff -ur a/tuple b/tuple |
| --- a/tuple 2011-03-15 14:49:07.000000000 -0700 |
| +++ b/tuple 2011-05-02 23:33:23.000000000 -0700 |
| @@ -77,7 +77,7 @@ |
| _Head& _M_head() { return *this; } |
| const _Head& _M_head() const { return *this; } |
| |
| - void _M_swap_impl(_Head&&) { /* no-op */ } |
| + void _M_swap_impl(_Head&) { /* no-op */ } |
| }; |
| |
| template<std::size_t _Idx, typename _Head> |
| @@ -97,7 +97,7 @@ |
| const _Head& _M_head() const { return _M_head_impl; } |
| |
| void |
| - _M_swap_impl(_Head&& __h) |
| + _M_swap_impl(_Head& __h) |
| { |
| using std::swap; |
| swap(__h, _M_head_impl); |
| @@ -125,7 +125,7 @@ |
| struct _Tuple_impl<_Idx> |
| { |
| protected: |
| - void _M_swap_impl(_Tuple_impl&&) { /* no-op */ } |
| + void _M_swap_impl(_Tuple_impl&) { /* no-op */ } |
| }; |
| |
| /** |
| @@ -214,7 +214,7 @@ |
| |
| protected: |
| void |
| - _M_swap_impl(_Tuple_impl&& __in) |
| + _M_swap_impl(_Tuple_impl& __in) |
| { |
| _Base::_M_swap_impl(__in._M_head()); |
| _Inherited::_M_swap_impl(__in._M_tail()); |
| @@ -292,7 +292,7 @@ |
| } |
| |
| void |
| - swap(tuple&& __in) |
| + swap(tuple& __in) |
| { _Inherited::_M_swap_impl(__in); } |
| }; |
| |
| @@ -301,7 +301,7 @@ |
| class tuple<> |
| { |
| public: |
| - void swap(tuple&&) { /* no-op */ } |
| + void swap(tuple&) { /* no-op */ } |
| }; |
| |
| /// tuple (2-element), with construction and assignment from a pair. |
| @@ -394,7 +394,7 @@ |
| } |
| |
| void |
| - swap(tuple&& __in) |
| + swap(tuple& __in) |
| { |
| using std::swap; |
| swap(this->_M_head(), __in._M_head()); |