From 4dc3e453c81f50fd3fac74ae85a7b7752cf58924 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Fri, 13 Jun 2008 12:03:13 +0000 Subject: [PATCH] stl_deque.h (deque<>::push_back(_Args&&...), [...]): Remove. 2008-06-13 Paolo Carlini * include/bits/stl_deque.h (deque<>::push_back(_Args&&...), deque<>::push_front(_Args&&...)): Remove. (deque<>::push_back(value_type&&), deque<>::push_front(value_type&&)): Add. (deque<>::push_back(const value_type&), deque<>::push_front(const value_type&)): Add back. (deque<>::emplace_back(_Args&&...), deque<>::emplace_front(_Args&&...)): Declare... * include/bits/deque.tcc: ... and define. * include/bits/stl_list.h (list<>::push_back(_Args&&...), list<>::push_front(_Args&&...)): Remove. (list<>::push_back(value_type&&), list<>::push_front(value_type&&), list<>::emplace_back(_Args&&...), list<>::emplace_front(_Args&&...)): Add. (list<>::push_back(const value_type&), list<>::push_front(const value_type&)): Add back. * include/bits/stl_vector.h (vector<>::push_back(_Args&&...)): Remove. (vector<>::push_back(value_type&&)): Add. (vector<>::push_back(const value_type&)): Add back. (vector<>::emplace_back(_Args&&...)): Declare... * include/bits/vector.tcc: ... and define. * include/bits/stl_queue.h (queue<>::push(_Args&&...), priority_queue<>::push(_Args&&...)): Remove. (queue<>::push(value_type&&), queue<>::emplace(_Args&&...), priority_queue<>::push(value_type&&), priority_queue<>::emplace(_Args&&...)): Add. (queue<>::push(const value_type&), priority_queue<>::push(const value_type&)): Add back. * include/bits/stl_stack.h (stack<>::push(_Args&&...)): Remove. (stack<>::push(value_type&&), stack<>::emplace(_Args&&...)): Add. (stack<>::push(const value_type&)): Add back. * include/debug/deque (deque<>::push_back(_Args&&...), deque<>::push_front(_Args&&...)): Remove. (deque<>::push_back(value_type&&), deque<>::push_front(value_type&&), deque<>::emplace_back(_Args&&...), deque<>::emplace_front(_Args&&...)): Add. (deque<>::push_back(const value_type&), deque<>::push_front(const value_type&)): Add back. * include/debug/list (list<>::push_back(_Args&&...), list<>::push_front(_Args&&...)): Remove. (list<>::push_back(value_type&&), list<>::push_front(value_type&&), list<>::emplace_back(_Args&&...), list<>::emplace_front(_Args&&...)): Add. (list<>::push_back(const value_type&), list<>::push_front(const value_type&)): Add back. * include/debug/vector (vector<>::push_back(_Args&&...)): Remove. (vector<>::push_back(value_type&&), vector<>::emplace_back(_Args&&...)): Add. (vector<>::push_back(const value_type&)): Add back. * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: Adjust dg-error line numbers. * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: Likewise. * testsuite/23_containers/deque/requirements/dr438/ constructor_1_neg.cc: Likewise. * testsuite/23_containers/deque/requirements/dr438/ constructor_2_neg.cc: Likewise. * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: Adjust dg-error line numbers. * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: Likewise. * testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc: Likewise. * testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: Adjust dg-error line numbers. * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/ constructor_1_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/ constructor_2_neg.cc: Likewise. From-SVN: r136750 --- libstdc++-v3/ChangeLog | 76 +++++++++++++++++++ libstdc++-v3/include/bits/deque.tcc | 37 ++++++++- libstdc++-v3/include/bits/stl_deque.h | 41 ++++------ libstdc++-v3/include/bits/stl_list.h | 24 ++++-- libstdc++-v3/include/bits/stl_queue.h | 33 +++++--- libstdc++-v3/include/bits/stl_stack.h | 15 ++-- libstdc++-v3/include/bits/stl_vector.h | 20 ++--- libstdc++-v3/include/bits/vector.tcc | 18 +++++ libstdc++-v3/include/debug/deque | 22 ++++-- libstdc++-v3/include/debug/list | 8 ++ libstdc++-v3/include/debug/vector | 12 ++- .../deque/requirements/dr438/assign_neg.cc | 4 +- .../requirements/dr438/constructor_1_neg.cc | 2 +- .../requirements/dr438/constructor_2_neg.cc | 2 +- .../deque/requirements/dr438/insert_neg.cc | 2 +- .../list/requirements/dr438/assign_neg.cc | 2 +- .../requirements/dr438/constructor_1_neg.cc | 2 +- .../requirements/dr438/constructor_2_neg.cc | 2 +- .../list/requirements/dr438/insert_neg.cc | 2 +- .../vector/requirements/dr438/assign_neg.cc | 2 +- .../requirements/dr438/constructor_1_neg.cc | 2 +- .../requirements/dr438/constructor_2_neg.cc | 2 +- .../vector/requirements/dr438/insert_neg.cc | 4 +- 23 files changed, 242 insertions(+), 92 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 2d1681c5646..ebfca51c964 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,79 @@ +2008-06-13 Paolo Carlini + + * include/bits/stl_deque.h (deque<>::push_back(_Args&&...), + deque<>::push_front(_Args&&...)): Remove. + (deque<>::push_back(value_type&&), + deque<>::push_front(value_type&&)): Add. + (deque<>::push_back(const value_type&), + deque<>::push_front(const value_type&)): Add back. + (deque<>::emplace_back(_Args&&...), + deque<>::emplace_front(_Args&&...)): Declare... + * include/bits/deque.tcc: ... and define. + * include/bits/stl_list.h (list<>::push_back(_Args&&...), + list<>::push_front(_Args&&...)): Remove. + (list<>::push_back(value_type&&), list<>::push_front(value_type&&), + list<>::emplace_back(_Args&&...), list<>::emplace_front(_Args&&...)): + Add. + (list<>::push_back(const value_type&), + list<>::push_front(const value_type&)): Add back. + * include/bits/stl_vector.h (vector<>::push_back(_Args&&...)): Remove. + (vector<>::push_back(value_type&&)): Add. + (vector<>::push_back(const value_type&)): Add back. + (vector<>::emplace_back(_Args&&...)): Declare... + * include/bits/vector.tcc: ... and define. + * include/bits/stl_queue.h (queue<>::push(_Args&&...), + priority_queue<>::push(_Args&&...)): Remove. + (queue<>::push(value_type&&), queue<>::emplace(_Args&&...), + priority_queue<>::push(value_type&&), + priority_queue<>::emplace(_Args&&...)): Add. + (queue<>::push(const value_type&), + priority_queue<>::push(const value_type&)): Add back. + * include/bits/stl_stack.h (stack<>::push(_Args&&...)): Remove. + (stack<>::push(value_type&&), stack<>::emplace(_Args&&...)): Add. + (stack<>::push(const value_type&)): Add back. + * include/debug/deque (deque<>::push_back(_Args&&...), + deque<>::push_front(_Args&&...)): Remove. + (deque<>::push_back(value_type&&), deque<>::push_front(value_type&&), + deque<>::emplace_back(_Args&&...), deque<>::emplace_front(_Args&&...)): + Add. + (deque<>::push_back(const value_type&), + deque<>::push_front(const value_type&)): Add back. + * include/debug/list (list<>::push_back(_Args&&...), + list<>::push_front(_Args&&...)): Remove. + (list<>::push_back(value_type&&), list<>::push_front(value_type&&), + list<>::emplace_back(_Args&&...), list<>::emplace_front(_Args&&...)): + Add. + (list<>::push_back(const value_type&), + list<>::push_front(const value_type&)): Add back. + * include/debug/vector (vector<>::push_back(_Args&&...)): Remove. + (vector<>::push_back(value_type&&), + vector<>::emplace_back(_Args&&...)): Add. + (vector<>::push_back(const value_type&)): Add back. + * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: + Adjust dg-error line numbers. + * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: + Likewise. + * testsuite/23_containers/deque/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: + Adjust dg-error line numbers. + * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: + Likewise. + * testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc: + Likewise. + * testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc: + Likewise. + * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: + Adjust dg-error line numbers. + * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: + Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_2_neg.cc: Likewise. + 2008-06-13 Paolo Carlini * include/tr1_impl/array (array<>::assign): Do not define in diff --git a/libstdc++-v3/include/bits/deque.tcc b/libstdc++-v3/include/bits/deque.tcc index 08b7adeeb65..9c1096f77ba 100644 --- a/libstdc++-v3/include/bits/deque.tcc +++ b/libstdc++-v3/include/bits/deque.tcc @@ -1,6 +1,6 @@ // Deque implementation (out of line) -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -85,6 +85,41 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) return *this; } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template + template + void + deque<_Tp, _Alloc>:: + emplace_front(_Args&&... __args) + { + if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first) + { + this->_M_impl.construct(this->_M_impl._M_start._M_cur - 1, + std::forward<_Args>(__args)...); + --this->_M_impl._M_start._M_cur; + } + else + _M_push_front_aux(std::forward<_Args>(__args)...); + } + + template + template + void + deque<_Tp, _Alloc>:: + emplace_back(_Args&&... __args) + { + if (this->_M_impl._M_finish._M_cur + != this->_M_impl._M_finish._M_last - 1) + { + this->_M_impl.construct(this->_M_impl._M_finish._M_cur, + std::forward<_Args>(__args)...); + ++this->_M_impl._M_finish._M_cur; + } + else + _M_push_back_aux(std::forward<_Args>(__args)...); + } +#endif + template typename deque<_Tp, _Alloc>::iterator deque<_Tp, _Alloc>:: diff --git a/libstdc++-v3/include/bits/stl_deque.h b/libstdc++-v3/include/bits/stl_deque.h index 6032765ed0c..b778f15a075 100644 --- a/libstdc++-v3/include/bits/stl_deque.h +++ b/libstdc++-v3/include/bits/stl_deque.h @@ -1117,7 +1117,6 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) * data to it. Due to the nature of a %deque this operation * can be done in constant time. */ -#ifndef __GXX_EXPERIMENTAL_CXX0X__ void push_front(const value_type& __x) { @@ -1129,20 +1128,15 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) else _M_push_front_aux(__x); } -#else + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + push_front(value_type&& __x) + { emplace_front(std::move(__x)); } + template void - push_front(_Args&&... __args) - { - if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first) - { - this->_M_impl.construct(this->_M_impl._M_start._M_cur - 1, - std::forward<_Args>(__args)...); - --this->_M_impl._M_start._M_cur; - } - else - _M_push_front_aux(std::forward<_Args>(__args)...); - } + emplace_front(_Args&&... __args); #endif /** @@ -1154,7 +1148,6 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) * to it. Due to the nature of a %deque this operation can be * done in constant time. */ -#ifndef __GXX_EXPERIMENTAL_CXX0X__ void push_back(const value_type& __x) { @@ -1167,21 +1160,15 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) else _M_push_back_aux(__x); } -#else + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + push_back(value_type&& __x) + { emplace_back(std::move(__x)); } + template void - push_back(_Args&&... __args) - { - if (this->_M_impl._M_finish._M_cur - != this->_M_impl._M_finish._M_last - 1) - { - this->_M_impl.construct(this->_M_impl._M_finish._M_cur, - std::forward<_Args>(__args)...); - ++this->_M_impl._M_finish._M_cur; - } - else - _M_push_back_aux(std::forward<_Args>(__args)...); - } + emplace_back(_Args&&... __args); #endif /** diff --git a/libstdc++-v3/include/bits/stl_list.h b/libstdc++-v3/include/bits/stl_list.h index a631b0ef1ef..08fb89ef117 100644 --- a/libstdc++-v3/include/bits/stl_list.h +++ b/libstdc++-v3/include/bits/stl_list.h @@ -833,15 +833,19 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) * done in constant time, and does not invalidate iterators and * references. */ -#ifndef __GXX_EXPERIMENTAL_CXX0X__ void push_front(const value_type& __x) { this->_M_insert(begin(), __x); } -#else + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + push_front(value_type&& __x) + { this->_M_insert(begin(), std::move(__x)); } + template void - push_front(_Args&&... __args) - { this->_M_insert(begin(), std::forward<_Args>(__args)...); } + emplace_front(_Args&&... __args) + { this->_M_insert(begin(), std::forward<_Args>(__args)...); } #endif /** @@ -870,15 +874,19 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) * in constant time, and does not invalidate iterators and * references. */ -#ifndef __GXX_EXPERIMENTAL_CXX0X__ void push_back(const value_type& __x) { this->_M_insert(end(), __x); } -#else + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + push_back(value_type&& __x) + { this->_M_insert(end(), std::move(__x)); } + template void - push_back(_Args&&... __args) - { this->_M_insert(end(), std::forward<_Args>(__args)...); } + emplace_back(_Args&&... __args) + { this->_M_insert(end(), std::forward<_Args>(__args)...); } #endif /** diff --git a/libstdc++-v3/include/bits/stl_queue.h b/libstdc++-v3/include/bits/stl_queue.h index 4ab3c46c0b8..053a59c1650 100644 --- a/libstdc++-v3/include/bits/stl_queue.h +++ b/libstdc++-v3/include/bits/stl_queue.h @@ -1,6 +1,6 @@ // Queue implementation -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -220,16 +220,19 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * to it. The time complexity of the operation depends on the * underlying sequence. */ -#ifndef __GXX_EXPERIMENTAL_CXX0X__ void push(const value_type& __x) { c.push_back(__x); } -#else - // NB: DR 756. + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + push(value_type&& __x) + { c.push_back(std::move(__x)); } + template void - push(_Args&&... __args) - { c.push_back(std::forward<_Args>(__args)...); } + emplace(_Args&&... __args) + { c.emplace_back(std::forward<_Args>(__args)...); } #endif /** @@ -509,20 +512,26 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * The time complexity of the operation depends on the underlying * sequence. */ -#ifndef __GXX_EXPERIMENTAL_CXX0X__ void push(const value_type& __x) { c.push_back(__x); std::push_heap(c.begin(), c.end(), comp); } -#else - // NB: DR 756. + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + push(value_type&& __x) + { + c.push_back(std::move(__x)); + std::push_heap(c.begin(), c.end(), comp); + } + template void - push(_Args&&... __args) - { - c.push_back(std::forward<_Args>(__args)...); + emplace(_Args&&... __args) + { + c.emplace_back(std::forward<_Args>(__args)...); std::push_heap(c.begin(), c.end(), comp); } #endif diff --git a/libstdc++-v3/include/bits/stl_stack.h b/libstdc++-v3/include/bits/stl_stack.h index 932388a7a68..13e4b7a4615 100644 --- a/libstdc++-v3/include/bits/stl_stack.h +++ b/libstdc++-v3/include/bits/stl_stack.h @@ -1,6 +1,6 @@ // Stack implementation -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -184,16 +184,19 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * to it. The time complexity of the operation depends on the * underlying sequence. */ -#ifndef __GXX_EXPERIMENTAL_CXX0X__ void push(const value_type& __x) { c.push_back(__x); } -#else - // NB: DR 756. + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + push(value_type&& __x) + { c.push_back(std::move(__x)); } + template void - push(_Args&&... __args) - { c.push_back(std::forward<_Args>(__args)...); } + emplace(_Args&&... __args) + { c.emplace_back(std::forward<_Args>(__args)...); } #endif /** diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h index 34bb595d528..aa874089d52 100644 --- a/libstdc++-v3/include/bits/stl_vector.h +++ b/libstdc++-v3/include/bits/stl_vector.h @@ -681,7 +681,6 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) * done in constant time if the %vector has preallocated space * available. */ -#ifndef __GXX_EXPERIMENTAL_CXX0X__ void push_back(const value_type& __x) { @@ -693,20 +692,15 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) else _M_insert_aux(end(), __x); } -#else + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + push_back(value_type&& __x) + { emplace_back(std::move(__x)); } + template void - push_back(_Args&&... __args) - { - if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) - { - this->_M_impl.construct(this->_M_impl._M_finish, - std::forward<_Args>(__args)...); - ++this->_M_impl._M_finish; - } - else - _M_insert_aux(end(), std::forward<_Args>(__args)...); - } + emplace_back(_Args&&... __args); #endif /** diff --git a/libstdc++-v3/include/bits/vector.tcc b/libstdc++-v3/include/bits/vector.tcc index 462d18f6cbb..04f76ca2c2c 100644 --- a/libstdc++-v3/include/bits/vector.tcc +++ b/libstdc++-v3/include/bits/vector.tcc @@ -88,6 +88,24 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) } } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template + template + void + vector<_Tp, _Alloc>:: + emplace_back(_Args&&... __args) + { + if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) + { + this->_M_impl.construct(this->_M_impl._M_finish, + std::forward<_Args>(__args)...); + ++this->_M_impl._M_finish; + } + else + _M_insert_aux(end(), std::forward<_Args>(__args)...); + } +#endif + template typename vector<_Tp, _Alloc>::iterator vector<_Tp, _Alloc>:: diff --git a/libstdc++-v3/include/debug/deque b/libstdc++-v3/include/debug/deque index 2f967b49f33..c37381f084f 100644 --- a/libstdc++-v3/include/debug/deque +++ b/libstdc++-v3/include/debug/deque @@ -1,6 +1,6 @@ // Debugging deque implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -254,7 +254,6 @@ namespace __debug } // 23.2.1.3 modifiers: -#ifndef __GXX_EXPERIMENTAL_CXX0X__ void push_front(const _Tp& __x) { @@ -268,20 +267,29 @@ namespace __debug _Base::push_back(__x); this->_M_invalidate_all(); } -#else + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + push_front(_Tp&& __x) + { emplace_front(std::move(__x)); } + + void + push_back(_Tp&& __x) + { emplace_back(std::move(__x)); } + template void - push_front(_Args&&... __args) + emplace_front(_Args&&... __args) { - _Base::push_front(std::forward<_Args>(__args)...); + _Base::emplace_front(std::forward<_Args>(__args)...); this->_M_invalidate_all(); } template void - push_back(_Args&&... __args) + emplace_back(_Args&&... __args) { - _Base::push_back(std::forward<_Args>(__args)...); + _Base::emplace_back(std::forward<_Args>(__args)...); this->_M_invalidate_all(); } diff --git a/libstdc++-v3/include/debug/list b/libstdc++-v3/include/debug/list index d0797e9bf46..7ab0bddff99 100644 --- a/libstdc++-v3/include/debug/list +++ b/libstdc++-v3/include/debug/list @@ -280,6 +280,10 @@ namespace __debug // 23.2.2.3 modifiers: using _Base::push_front; +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + using _Base::emplace_front; +#endif + void pop_front() { @@ -291,6 +295,10 @@ namespace __debug using _Base::push_back; +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + using _Base::emplace_back; +#endif + void pop_back() { diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector index 7945b54591e..12bd52f0b2b 100644 --- a/libstdc++-v3/include/debug/vector +++ b/libstdc++-v3/include/debug/vector @@ -289,7 +289,6 @@ namespace __debug using _Base::data; // 23.2.4.3 modifiers: -#ifndef __GXX_EXPERIMENTAL_CXX0X__ void push_back(const _Tp& __x) { @@ -299,13 +298,18 @@ namespace __debug this->_M_invalidate_all(); _M_update_guaranteed_capacity(); } -#else + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + push_back(_Tp&& __x) + { emplace_back(std::move(__x)); } + template void - push_back(_Args&&... __args) + emplace_back(_Args&&... __args) { bool __realloc = _M_requires_reallocation(this->size() + 1); - _Base::push_back(std::forward<_Args>(__args)...); + _Base::emplace_back(std::forward<_Args>(__args)...); if (__realloc) this->_M_invalidate_all(); _M_update_guaranteed_capacity(); diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc index 3d40c00596b..2cb464cb86c 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini -// Copyright (C) 2007 Free Software Foundation +// Copyright (C) 2007, 2008 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -19,7 +19,7 @@ // USA. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1449 } +// { dg-error "no matching" "" { target *-*-* } 1436 } // { dg-excess-errors "" } #include diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc index fb4c40ef8cc..57c865f34c0 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc @@ -19,7 +19,7 @@ // USA. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1388 } +// { dg-error "no matching" "" { target *-*-* } 1375 } // { dg-excess-errors "" } #include diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc index 1f24c98278f..a46674c52dc 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc @@ -19,7 +19,7 @@ // USA. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1388 } +// { dg-error "no matching" "" { target *-*-* } 1375 } // { dg-excess-errors "" } #include diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc index 522022a856d..3ae748ca316 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc @@ -19,7 +19,7 @@ // USA. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1533 } +// { dg-error "no matching" "" { target *-*-* } 1520 } // { dg-excess-errors "" } #include diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc index 1478f3de947..8eeff630927 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc @@ -19,7 +19,7 @@ // USA. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1317 } +// { dg-error "no matching" "" { target *-*-* } 1325 } // { dg-excess-errors "" } #include diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc index d5dc3908b7c..06b71622421 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc @@ -19,7 +19,7 @@ // USA. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1286 } +// { dg-error "no matching" "" { target *-*-* } 1294 } // { dg-excess-errors "" } #include diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc index 10f726b9f73..bfe871077d7 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc @@ -19,7 +19,7 @@ // USA. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1286 } +// { dg-error "no matching" "" { target *-*-* } 1294 } // { dg-excess-errors "" } #include diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc index 1a97c4b4436..d75ed067e24 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc @@ -19,7 +19,7 @@ // USA. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1286 } +// { dg-error "no matching" "" { target *-*-* } 1294 } // { dg-excess-errors "" } #include diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc index eb6aa1f0b6b..64c6a98dfb5 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc @@ -19,7 +19,7 @@ // USA. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 992 } +// { dg-error "no matching" "" { target *-*-* } 986 } // { dg-excess-errors "" } #include diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc index 6e65a5e8092..34e602da583 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc @@ -19,7 +19,7 @@ // USA. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 932 } +// { dg-error "no matching" "" { target *-*-* } 926 } // { dg-excess-errors "" } #include diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc index dce05ed2cf9..f1af46c43a2 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc @@ -19,7 +19,7 @@ // USA. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 932 } +// { dg-error "no matching" "" { target *-*-* } 926 } // { dg-excess-errors "" } #include diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc index 3df2fc8b745..a95f57857d8 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini -// Copyright (C) 2007 Free Software Foundation +// Copyright (C) 2007, 2008 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -19,7 +19,7 @@ // USA. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1033 } +// { dg-error "no matching" "" { target *-*-* } 1027 } // { dg-excess-errors "" } #include -- 2.30.2