diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2008-10-14 17:14:49 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2008-10-14 17:14:49 +0000 |
commit | c841843f9ec213349ecfdf80b0e1a0a6e9b1872a (patch) | |
tree | 0fbe8a8835d68a84c792ca9db735a2182590d552 | |
parent | 9c88061824631d4fc318c57b72cfd1913007d50c (diff) | |
download | gcc-c841843f9ec213349ecfdf80b0e1a0a6e9b1872a.zip gcc-c841843f9ec213349ecfdf80b0e1a0a6e9b1872a.tar.gz gcc-c841843f9ec213349ecfdf80b0e1a0a6e9b1872a.tar.bz2 |
stl_list.h (_List_node<>::_List_node<>(_Args&&...)): Add in C++0x mode.
2008-10-14 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/stl_list.h (_List_node<>::_List_node<>(_Args&&...)):
Add in C++0x mode.
(list<>::_M_create_node<>(_Args&&...)): Use _M_get_Node_allocator.
(list<>::_M_erase(iterator): Likewise, in C++0x mode.
* include/bits/list.tcc (_List_base<>::_M_clear): Likewise.
* testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
Adjust dg-error line number.
* 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.
From-SVN: r141113
7 files changed, 38 insertions, 8 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 63cb52f..05e3e8a 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,21 @@ 2008-10-14 Paolo Carlini <paolo.carlini@oracle.com> + * include/bits/stl_list.h (_List_node<>::_List_node<>(_Args&&...)): + Add in C++0x mode. + (list<>::_M_create_node<>(_Args&&...)): Use _M_get_Node_allocator. + (list<>::_M_erase(iterator): Likewise, in C++0x mode. + * include/bits/list.tcc (_List_base<>::_M_clear): Likewise. + * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: + Adjust dg-error line number. + * 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. + +2008-10-14 Paolo Carlini <paolo.carlini@oracle.com> + * include/bits/stl_tree.h (_Rb_tree<>::max_size): Use Node_allocator for improved accuracy. * include/bits/stl_list.h (list<>::max_size): Likewise. diff --git a/libstdc++-v3/include/bits/list.tcc b/libstdc++-v3/include/bits/list.tcc index 57ee10c..fc4f6ab 100644 --- a/libstdc++-v3/include/bits/list.tcc +++ b/libstdc++-v3/include/bits/list.tcc @@ -1,6 +1,6 @@ // List 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 @@ -75,7 +75,11 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) { _Node* __tmp = __cur; __cur = static_cast<_Node*>(__cur->_M_next); +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + _M_get_Node_allocator().destroy(__tmp); +#else _M_get_Tp_allocator().destroy(&__tmp->_M_data); +#endif _M_put_node(__tmp); } } diff --git a/libstdc++-v3/include/bits/stl_list.h b/libstdc++-v3/include/bits/stl_list.h index 7f31e3c..18f6f02 100644 --- a/libstdc++-v3/include/bits/stl_list.h +++ b/libstdc++-v3/include/bits/stl_list.h @@ -101,6 +101,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) { ///< User's data. _Tp _M_data; + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename... _Args> + _List_node(_Args&&... __args) + : _List_node_base(), _M_data(std::forward<_Args>(__args)...) { } +#endif }; /** @@ -478,8 +484,8 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) _Node* __p = this->_M_get_node(); try { - _M_get_Tp_allocator().construct(&__p->_M_data, - std::forward<_Args>(__args)...); + _M_get_Node_allocator().construct(__p, + std::forward<_Args>(__args)...); } catch(...) { @@ -1423,7 +1429,11 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) { __position._M_node->unhook(); _Node* __n = static_cast<_Node*>(__position._M_node); - _M_get_Tp_allocator().destroy(&__n->_M_data); +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + _M_get_Node_allocator().destroy(__n); +#else + _M_get_Tp_allocator().destroy(&__n->_M_data); +#endif _M_put_node(__n); } 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 23c541a..5e7d7ea 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 *-*-* } 1383 } +// { dg-error "no matching" "" { target *-*-* } 1389 } // { dg-excess-errors "" } #include <list> 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 479c416..dd9a4c3 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 *-*-* } 1352 } +// { dg-error "no matching" "" { target *-*-* } 1358 } // { dg-excess-errors "" } #include <list> 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 3fd7985..507c60d 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 *-*-* } 1352 } +// { dg-error "no matching" "" { target *-*-* } 1358 } // { dg-excess-errors "" } #include <list> 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 9b5e13a..497db79 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 *-*-* } 1352 } +// { dg-error "no matching" "" { target *-*-* } 1358 } // { dg-excess-errors "" } #include <list> |