Now that G++ supports it we can use a NSDMI for std::list::_M_size to
avoid needing conditional compilation to set it in the constructors.
I think the attached patch is an improvement so I plan to commit it to
trunk soon unless I hear objections.
* include/bits/stl_list.h (list::_M_size): Use NSDMI.
* testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
Adjust line numbers.
* 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/list/requirements/dr438/insert_neg.cc:
Likewise.
Tested x86_64.
diff --git a/libstdc++-v3/include/bits/stl_list.h
b/libstdc++-v3/include/bits/stl_list.h
index 1e760ed..634b579 100644
--- a/libstdc++-v3/include/bits/stl_list.h
+++ b/libstdc++-v3/include/bits/stl_list.h
@@ -314,26 +314,20 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
__detail::_List_node_base _M_node;
#ifdef __GXX_EXPERIMENTAL_CXX0X__
- size_t _M_size;
+ size_t _M_size = 0;
#endif
_List_impl()
: _Node_alloc_type(), _M_node()
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
- , _M_size(0)
-#endif
{ }
_List_impl(const _Node_alloc_type& __a)
: _Node_alloc_type(__a), _M_node()
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
- , _M_size(0)
-#endif
{ }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
_List_impl(_Node_alloc_type&& __a)
- : _Node_alloc_type(std::move(__a)), _M_node(), _M_size(0)
+ : _Node_alloc_type(std::move(__a)), _M_node()
{ }
#endif
};
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 c088e6c..05664b9 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
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1574 }
+// { dg-error "no matching" "" { target *-*-* } 1568 }
#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 94fbe9a..0ef8da8 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
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1530 }
+// { dg-error "no matching" "" { target *-*-* } 1524 }
#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 c02d5a5..f0836f6 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
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1530 }
+// { dg-error "no matching" "" { target *-*-* } 1524 }
#include <list>
#include <utility>
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 c2fa737..db63e39 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
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1530 }
+// { dg-error "no matching" "" { target *-*-* } 1524 }
#include <list>