Index: include/bits/list.tcc =================================================================== --- include/bits/list.tcc (revision 216116) +++ include/bits/list.tcc (working copy) @@ -59,25 +59,25 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_CONTAINER template void _List_base<_Tp, _Alloc>:: _M_clear() _GLIBCXX_NOEXCEPT { typedef _List_node<_Tp> _Node; - _Node* __cur = static_cast<_Node*>(_M_impl._M_node._M_next); + __detail::_List_node_base* __cur = _M_impl._M_node._M_next; while (__cur != &_M_impl._M_node) { - _Node* __tmp = __cur; - __cur = static_cast<_Node*>(__cur->_M_next); + _Node* __tmp = static_cast<_Node*>(__cur); + __cur = __tmp->_M_next; #if __cplusplus >= 201103L _M_get_Node_allocator().destroy(__tmp); #else _M_get_Tp_allocator().destroy(std::__addressof(__tmp->_M_data)); #endif _M_put_node(__tmp); } } #if __cplusplus >= 201103L Index: include/bits/stl_list.h =================================================================== --- include/bits/stl_list.h (revision 216116) +++ include/bits/stl_list.h (working copy) @@ -325,57 +325,59 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { __first = __first->_M_next; ++__n; } return __n; } struct _List_impl : public _Node_alloc_type { +#if _GLIBCXX_USE_CXX11_ABI + _List_node _M_node; +#else __detail::_List_node_base _M_node; +#endif _List_impl() : _Node_alloc_type(), _M_node() { } _List_impl(const _Node_alloc_type& __a) _GLIBCXX_NOEXCEPT : _Node_alloc_type(__a), _M_node() { } #if __cplusplus >= 201103L _List_impl(_Node_alloc_type&& __a) _GLIBCXX_NOEXCEPT : _Node_alloc_type(std::move(__a)), _M_node() { } #endif }; _List_impl _M_impl; #if _GLIBCXX_USE_CXX11_ABI - size_t _M_size; - - size_t _M_get_size() const { return _M_size; } + size_t _M_get_size() const { return _M_impl._M_node._M_data; } - void _M_set_size(size_t __n) { _M_size = __n; } + void _M_set_size(size_t __n) { _M_impl._M_node._M_data = __n; } - void _M_inc_size(size_t __n) { _M_size += __n; } + void _M_inc_size(size_t __n) { _M_impl._M_node._M_data += __n; } - void _M_dec_size(size_t __n) { _M_size -= __n; } + void _M_dec_size(size_t __n) { _M_impl._M_node._M_data -= __n; } size_t _M_distance(const __detail::_List_node_base* __first, const __detail::_List_node_base* __last) const { return _S_distance(__first, __last); } // return the stored size - size_t _M_node_count() const { return _M_size; } + size_t _M_node_count() const { return _M_impl._M_node._M_data; } #else // dummy implementations used when the size is not stored size_t _M_get_size() const { return 0; } void _M_set_size(size_t) { } void _M_inc_size(size_t) { } void _M_dec_size(size_t) { } size_t _M_distance(const void*, const void*) const { return 0; } // count the number of nodes size_t _M_node_count() const Index: testsuite/23_containers/list/requirements/dr438/assign_neg.cc =================================================================== --- testsuite/23_containers/list/requirements/dr438/assign_neg.cc (revision 216116) +++ testsuite/23_containers/list/requirements/dr438/assign_neg.cc (working copy) @@ -11,21 +11,21 @@ // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING3. If not see // . // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1728 } +// { dg-error "no matching" "" { target *-*-* } 1730 } #include struct A { explicit A(int) { } }; void f() { Index: testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc =================================================================== --- testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc (revision 216116) +++ testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc (working copy) @@ -11,19 +11,19 @@ // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING3. If not see // . // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1680 } +// { dg-error "no matching" "" { target *-*-* } 1682 } #include void f() { typedef std::list > list_type; list_type l(10, 1); } Index: testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc =================================================================== --- testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc (revision 216116) +++ testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc (working copy) @@ -11,20 +11,20 @@ // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING3. If not see // . // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1680 } +// { dg-error "no matching" "" { target *-*-* } 1682 } #include #include void f() { typedef std::list > > list_type; list_type l('a', 'b'); } Index: testsuite/23_containers/list/requirements/dr438/insert_neg.cc =================================================================== --- testsuite/23_containers/list/requirements/dr438/insert_neg.cc (revision 216116) +++ testsuite/23_containers/list/requirements/dr438/insert_neg.cc (working copy) @@ -11,21 +11,21 @@ // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING3. If not see // . // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1680 } +// { dg-error "no matching" "" { target *-*-* } 1682 } #include struct A { explicit A(int) { } }; void f() {