diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2008-10-19 14:49:38 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2008-10-19 14:49:38 +0000 |
commit | 25bbe9bc633bd72933dcc97165d0698553123987 (patch) | |
tree | e3730756efc6cdc0b9fb99534017a5a3cfdf4309 | |
parent | a7e72022ce7fbf78637fb8475e9c357f00ff120d (diff) | |
download | gcc-25bbe9bc633bd72933dcc97165d0698553123987.zip gcc-25bbe9bc633bd72933dcc97165d0698553123987.tar.gz gcc-25bbe9bc633bd72933dcc97165d0698553123987.tar.bz2 |
2008-10-19 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/stl_tree.h (_Rb_tree_node<>::_Rb_tree_node<>
(_Args&&...)): Add in C++0x mode.
(_Rb_tree<>::_M_create_node<>(_Args&&...)): Add in C++0x mode,
use _M_get_Node_allocator.
(_Rb_tree<>::_M_destroy_node(_Link_type): Use _M_get_Node_allocator
in C++0x mode.
* testsuite/23_containers/set/operators/1_neg.cc: Adjust dg-error
line numbers.
* testsuite/23_containers/map/operators/1_neg.cc: Likewise.
From-SVN: r141226
-rw-r--r-- | libstdc++-v3/ChangeLog | 12 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_tree.h | 48 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc | 6 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc | 6 |
4 files changed, 59 insertions, 13 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index cbbc0ef..10f226d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,15 @@ +2008-10-19 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/stl_tree.h (_Rb_tree_node<>::_Rb_tree_node<> + (_Args&&...)): Add in C++0x mode. + (_Rb_tree<>::_M_create_node<>(_Args&&...)): Add in C++0x mode, + use _M_get_Node_allocator. + (_Rb_tree<>::_M_destroy_node(_Link_type): Use _M_get_Node_allocator + in C++0x mode. + * testsuite/23_containers/set/operators/1_neg.cc: Adjust dg-error + line numbers. + * testsuite/23_containers/map/operators/1_neg.cc: Likewise. + 2008-10-18 Douglas Gregor <doug.gregor@gmail.com> * include/bits/stl_pair.h (__may_be_null_pointer_init): New. diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h index 73b75e4..c80dbef 100644 --- a/libstdc++-v3/include/bits/stl_tree.h +++ b/libstdc++-v3/include/bits/stl_tree.h @@ -133,6 +133,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { typedef _Rb_tree_node<_Val>* _Link_type; _Val _M_value_field; + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename... _Args> + _Rb_tree_node(_Args&&... __args) + : _Rb_tree_node_base(), + _M_value_field(std::forward<_Args>(__args)...) { } +#endif }; _Rb_tree_node_base* @@ -360,6 +367,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _M_put_node(_Link_type __p) { _M_impl._Node_allocator::deallocate(__p, 1); } +#ifndef __GXX_EXPERIMENTAL_CXX0X__ _Link_type _M_create_node(const value_type& __x) { @@ -374,6 +382,39 @@ _GLIBCXX_BEGIN_NAMESPACE(std) return __tmp; } + void + _M_destroy_node(_Link_type __p) + { + get_allocator().destroy(&__p->_M_value_field); + _M_put_node(__p); + } +#else + template<typename... _Args> + _Link_type + _M_create_node(_Args&&... __args) + { + _Link_type __tmp = _M_get_node(); + try + { + _M_get_Node_allocator().construct(__tmp, + std::forward<_Args>(__args)...); + } + catch(...) + { + _M_put_node(__tmp); + __throw_exception_again; + } + return __tmp; + } + + void + _M_destroy_node(_Link_type __p) + { + _M_get_Node_allocator().destroy(__p); + _M_put_node(__p); + } +#endif + _Link_type _M_clone_node(_Const_Link_type __x) { @@ -384,13 +425,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) return __tmp; } - void - _M_destroy_node(_Link_type __p) - { - get_allocator().destroy(&__p->_M_value_field); - _M_put_node(__p); - } - protected: template<typename _Key_compare, bool _Is_pod_comparator = __is_pod(_Key_compare)> diff --git a/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc b/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc index 7d66059..dd8888a 100644 --- a/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc @@ -1,6 +1,6 @@ // { dg-do compile } -// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2000, 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 @@ -42,5 +42,5 @@ void test01() test &= itr == mapByName.end(); // { dg-error "no" } } -// { dg-error "candidates are" "" { target *-*-* } 210 } -// { dg-error "candidates are" "" { target *-*-* } 214 } +// { dg-error "candidates are" "" { target *-*-* } 217 } +// { dg-error "candidates are" "" { target *-*-* } 221 } diff --git a/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc b/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc index a999e5b..5dfb45e 100644 --- a/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc @@ -1,6 +1,6 @@ // { dg-do compile } -// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2000, 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 @@ -40,5 +40,5 @@ void test01() test &= itr == setByName.end(); // { dg-error "no" } } -// { dg-error "candidates are" "" { target *-*-* } 285 } -// { dg-error "candidates are" "" { target *-*-* } 289 } +// { dg-error "candidates are" "" { target *-*-* } 292 } +// { dg-error "candidates are" "" { target *-*-* } 296 } |