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>
 

Reply via email to