set.h: Protect move assignment operator vs self assignment.
2010-01-08 Paolo Carlini <paolo.carlini@oracle.com> * include/debug/set.h: Protect move assignment operator vs self assignment. * include/debug/unordered_map: Likewise. * include/debug/multiset.h: Likewise. * include/debug/vector: Likewise. * include/debug/unordered_set: Likewise. * include/debug/deque: Likewise. * include/debug/map.h: Likewise. * include/debug/list: Likewise. * include/debug/multimap.h: Likewise. * include/tr1_impl/unordered_map: Likewise. * include/tr1_impl/unordered_set: Likewise. * include/profile/set.h: Likewise. * include/profile/unordered_map: Likewise. * include/profile/multiset.h: Likewise. * include/profile/unordered_set: Likewise. * include/profile/vector: Likewise. * include/profile/deque: Likewise. * include/profile/map.h: Likewise. * include/profile/list: Likewise. * include/profile/multimap.h: Likewise. * include/ext/vstring.h: Likewise. * include/bits/stl_list.h: Likewise. * include/bits/stl_map.h: Likewise. * include/bits/stl_set.h: Likewise. * include/bits/stl_multimap.h: Likewise. * include/bits/stl_vector.h: Likewise. * include/bits/stl_deque.h: Likewise. * include/bits/stl_multiset.h: Likewise. * include/ext/vstring.h: Use clear(). * testsuite/ext/vstring/cons/self_move_assign.cc: New. * testsuite/23_containers/unordered_map/cons/self_move_assign.cc: Likewise. * testsuite/23_containers/multimap/cons/self_move_assign.cc: Likewise. * testsuite/23_containers/set/cons/self_move_assign.cc: Likewise. * testsuite/23_containers/unordered_multimap/cons/ self_move_assign.cc: Likewise. * testsuite/23_containers/forward_list/cons/self_move_assign.cc: Likewise. * testsuite/23_containers/unordered_set/cons/self_move_assign.cc: Likewise. * testsuite/23_containers/vector/cons/self_move_assign.cc: Likewise. * testsuite/23_containers/deque/cons/self_move_assign.cc: Likewise. * testsuite/23_containers/multiset/cons/self_move_assign.cc: Likewise. * testsuite/23_containers/list/cons/self_move_assign.cc: Likewise. * testsuite/23_containers/unordered_multiset/cons/ self_move_assign.cc: Likewise. * testsuite/23_containers/map/cons/self_move_assign.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: Adjust dg-error line numbers. * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/ constructor_1_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/ constructor_2_neg.cc: Likewise. * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: Likewise. * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: Likewise. * testsuite/23_containers/deque/requirements/dr438/ constructor_1_neg.cc: Likewise. * testsuite/23_containers/deque/requirements/dr438/ constructor_2_neg.cc: Likewise. * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: Likewise. * 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. * testsuite/ext/vstring/moveable.cc: Move to... * testsuite/ext/vstring/cons/moveable.cc: ... here. * testsuite/23_containers/unordered_map/moveable.cc: Move to... * testsuite/23_containers/unordered_map/cons/moveable.cc ... here. * testsuite/23_containers/multimap/moveable.cc: Move to... * testsuite/23_containers/multimap/cons/moveable.cc: ... here. * testsuite/23_containers/set/moveable.cc: Move to... * testsuite/23_containers/set/cons/moveable.cc: ... here. * testsuite/23_containers/unordered_multimap/moveable.cc: Move to... * testsuite/23_containers/unordered_multimap/cons/moveable.cc: ... here. * testsuite/23_containers/forward_list/moveable.cc: Move to... * testsuite/23_containers/forward_list/cons/moveable.cc: ... here. * testsuite/23_containers/unordered_set/moveable.cc Move to... * testsuite/23_containers/unordered_set/moveable.cc: ... here. * testsuite/23_containers/vector/cons/moveable.cc Move to... * testsuite/23_containers/vector/cons/moveable2.cc: ... this. * testsuite/23_containers/deque/cons/moveable.cc Move to... * testsuite/23_containers/deque/cons/moveable2.cc: ... this. * testsuite/23_containers/multiset/moveable.cc Move to... * testsuite/23_containers/multiset/cons/moveable.cc: ... here. * testsuite/23_containers/list/moveable.h Move to... * testsuite/23_containers/list/cons/moveable.h: ... here. * testsuite/23_containers/list/moveable.cc Move to... * testsuite/23_containers/list/cons/moveable.cc: ... here. * testsuite/23_containers/unordered_multiset/moveable.cc Move to... * testsuite/23_containers/unordered_multiset/cons/moveable.cc: ... here. * testsuite/23_containers/map/moveable.cc Move to... * testsuite/23_containers/map/cons/moveable.cc: ... here. * testsuite/23_containers/vector/moveable.cc: Move to... * testsuite/23_containers/vector/cons/moveable.cc: ... here. * testsuite/23_containers/deque/moveable.cc: Move to... * testsuite/23_containers/deque/cons/moveable.cc: ... here. From-SVN: r155754
This commit is contained in:
parent
06cced6cd9
commit
6b592ab357
70 changed files with 984 additions and 225 deletions
|
@ -1,3 +1,114 @@
|
|||
2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
* include/debug/set.h: Protect move assignment operator vs self
|
||||
assignment.
|
||||
* include/debug/unordered_map: Likewise.
|
||||
* include/debug/multiset.h: Likewise.
|
||||
* include/debug/vector: Likewise.
|
||||
* include/debug/unordered_set: Likewise.
|
||||
* include/debug/deque: Likewise.
|
||||
* include/debug/map.h: Likewise.
|
||||
* include/debug/list: Likewise.
|
||||
* include/debug/multimap.h: Likewise.
|
||||
* include/tr1_impl/unordered_map: Likewise.
|
||||
* include/tr1_impl/unordered_set: Likewise.
|
||||
* include/profile/set.h: Likewise.
|
||||
* include/profile/unordered_map: Likewise.
|
||||
* include/profile/multiset.h: Likewise.
|
||||
* include/profile/unordered_set: Likewise.
|
||||
* include/profile/vector: Likewise.
|
||||
* include/profile/deque: Likewise.
|
||||
* include/profile/map.h: Likewise.
|
||||
* include/profile/list: Likewise.
|
||||
* include/profile/multimap.h: Likewise.
|
||||
* include/ext/vstring.h: Likewise.
|
||||
* include/bits/stl_list.h: Likewise.
|
||||
* include/bits/stl_map.h: Likewise.
|
||||
* include/bits/stl_set.h: Likewise.
|
||||
* include/bits/stl_multimap.h: Likewise.
|
||||
* include/bits/stl_vector.h: Likewise.
|
||||
* include/bits/stl_deque.h: Likewise.
|
||||
* include/bits/stl_multiset.h: Likewise.
|
||||
* include/ext/vstring.h: Use clear().
|
||||
* testsuite/ext/vstring/cons/self_move_assign.cc: New.
|
||||
* testsuite/23_containers/unordered_map/cons/self_move_assign.cc:
|
||||
Likewise.
|
||||
* testsuite/23_containers/multimap/cons/self_move_assign.cc: Likewise.
|
||||
* testsuite/23_containers/set/cons/self_move_assign.cc: Likewise.
|
||||
* testsuite/23_containers/unordered_multimap/cons/
|
||||
self_move_assign.cc: Likewise.
|
||||
* testsuite/23_containers/forward_list/cons/self_move_assign.cc:
|
||||
Likewise.
|
||||
* testsuite/23_containers/unordered_set/cons/self_move_assign.cc:
|
||||
Likewise.
|
||||
* testsuite/23_containers/vector/cons/self_move_assign.cc: Likewise.
|
||||
* testsuite/23_containers/deque/cons/self_move_assign.cc: Likewise.
|
||||
* testsuite/23_containers/multiset/cons/self_move_assign.cc: Likewise.
|
||||
* testsuite/23_containers/list/cons/self_move_assign.cc: Likewise.
|
||||
* testsuite/23_containers/unordered_multiset/cons/
|
||||
self_move_assign.cc: Likewise.
|
||||
* testsuite/23_containers/map/cons/self_move_assign.cc: Likewise.
|
||||
|
||||
* testsuite/23_containers/vector/requirements/dr438/assign_neg.cc:
|
||||
Adjust dg-error line numbers.
|
||||
* testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
|
||||
Likewise.
|
||||
* testsuite/23_containers/vector/requirements/dr438/
|
||||
constructor_1_neg.cc: Likewise.
|
||||
* testsuite/23_containers/vector/requirements/dr438/
|
||||
constructor_2_neg.cc: Likewise.
|
||||
* testsuite/23_containers/deque/requirements/dr438/assign_neg.cc:
|
||||
Likewise.
|
||||
* testsuite/23_containers/deque/requirements/dr438/insert_neg.cc:
|
||||
Likewise.
|
||||
* testsuite/23_containers/deque/requirements/dr438/
|
||||
constructor_1_neg.cc: Likewise.
|
||||
* testsuite/23_containers/deque/requirements/dr438/
|
||||
constructor_2_neg.cc: Likewise.
|
||||
* testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
|
||||
Likewise.
|
||||
* 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.
|
||||
|
||||
* testsuite/ext/vstring/moveable.cc: Move to...
|
||||
* testsuite/ext/vstring/cons/moveable.cc: ... here.
|
||||
* testsuite/23_containers/unordered_map/moveable.cc: Move to...
|
||||
* testsuite/23_containers/unordered_map/cons/moveable.cc ... here.
|
||||
* testsuite/23_containers/multimap/moveable.cc: Move to...
|
||||
* testsuite/23_containers/multimap/cons/moveable.cc: ... here.
|
||||
* testsuite/23_containers/set/moveable.cc: Move to...
|
||||
* testsuite/23_containers/set/cons/moveable.cc: ... here.
|
||||
* testsuite/23_containers/unordered_multimap/moveable.cc: Move to...
|
||||
* testsuite/23_containers/unordered_multimap/cons/moveable.cc:
|
||||
... here.
|
||||
* testsuite/23_containers/forward_list/moveable.cc: Move to...
|
||||
* testsuite/23_containers/forward_list/cons/moveable.cc: ... here.
|
||||
* testsuite/23_containers/unordered_set/moveable.cc Move to...
|
||||
* testsuite/23_containers/unordered_set/moveable.cc: ... here.
|
||||
* testsuite/23_containers/vector/cons/moveable.cc Move to...
|
||||
* testsuite/23_containers/vector/cons/moveable2.cc: ... this.
|
||||
* testsuite/23_containers/deque/cons/moveable.cc Move to...
|
||||
* testsuite/23_containers/deque/cons/moveable2.cc: ... this.
|
||||
* testsuite/23_containers/multiset/moveable.cc Move to...
|
||||
* testsuite/23_containers/multiset/cons/moveable.cc: ... here.
|
||||
* testsuite/23_containers/list/moveable.h Move to...
|
||||
* testsuite/23_containers/list/cons/moveable.h: ... here.
|
||||
* testsuite/23_containers/list/moveable.cc Move to...
|
||||
* testsuite/23_containers/list/cons/moveable.cc: ... here.
|
||||
* testsuite/23_containers/unordered_multiset/moveable.cc Move to...
|
||||
* testsuite/23_containers/unordered_multiset/cons/moveable.cc:
|
||||
... here.
|
||||
* testsuite/23_containers/map/moveable.cc Move to...
|
||||
* testsuite/23_containers/map/cons/moveable.cc: ... here.
|
||||
* testsuite/23_containers/vector/moveable.cc: Move to...
|
||||
* testsuite/23_containers/vector/cons/moveable.cc: ... here.
|
||||
* testsuite/23_containers/deque/moveable.cc: Move to...
|
||||
* testsuite/23_containers/deque/cons/moveable.cc: ... here.
|
||||
|
||||
2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR libstdc++/42573
|
||||
|
|
|
@ -884,9 +884,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
|
|||
deque&
|
||||
operator=(deque&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// List implementation -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -606,9 +606,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
|
|||
list&
|
||||
operator=(list&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Map implementation -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -265,9 +265,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
|
|||
map&
|
||||
operator=(map&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Multimap implementation -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -262,9 +262,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
|
|||
multimap&
|
||||
operator=(multimap&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Multiset implementation -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -234,9 +234,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
|
|||
multiset&
|
||||
operator=(multiset&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Set implementation -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -241,9 +241,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
|
|||
set&
|
||||
operator=(set&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -335,9 +335,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
|
|||
vector&
|
||||
operator=(vector&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -110,9 +110,12 @@ namespace __debug
|
|||
deque&
|
||||
operator=(deque&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -112,9 +112,12 @@ namespace __debug
|
|||
list&
|
||||
operator=(list&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -115,9 +115,12 @@ namespace __debug
|
|||
map&
|
||||
operator=(map&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -116,9 +116,12 @@ namespace __debug
|
|||
multimap&
|
||||
operator=(multimap&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -113,9 +113,12 @@ namespace __debug
|
|||
multiset&
|
||||
operator=(multiset&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -113,9 +113,12 @@ namespace __debug
|
|||
set&
|
||||
operator=(set&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Debugging unordered_map/unordered_multimap implementation -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||
// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -115,9 +115,12 @@ namespace __debug
|
|||
unordered_map&
|
||||
operator=(unordered_map&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@ -388,9 +391,12 @@ namespace __debug
|
|||
unordered_multimap&
|
||||
operator=(unordered_multimap&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Debugging unordered_set/unordered_multiset implementation -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||
// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -115,9 +115,12 @@ namespace __debug
|
|||
unordered_set&
|
||||
operator=(unordered_set&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -124,9 +124,12 @@ namespace __debug
|
|||
vector&
|
||||
operator=(vector&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
clear();
|
||||
swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -261,7 +261,10 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
|
|||
operator=(__versa_string&& __str)
|
||||
{
|
||||
if (this != &__str)
|
||||
this->swap(__str);
|
||||
{
|
||||
this->clear();
|
||||
this->swap(__str);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -102,9 +102,12 @@ namespace __profile
|
|||
deque&
|
||||
operator=(deque&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -102,9 +102,12 @@ namespace __profile
|
|||
list&
|
||||
operator=(list&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -121,9 +121,12 @@ namespace __profile
|
|||
map&
|
||||
operator=(map&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Profiling multimap implementation -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -106,9 +106,12 @@ namespace __profile
|
|||
multimap&
|
||||
operator=(multimap&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -104,9 +104,12 @@ namespace __profile
|
|||
multiset&
|
||||
operator=(multiset&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -104,9 +104,12 @@ namespace __profile
|
|||
set&
|
||||
operator=(set&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -130,9 +130,12 @@ namespace __profile
|
|||
unordered_map&
|
||||
operator=(unordered_map&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@ -355,9 +358,12 @@ namespace __profile
|
|||
unordered_multimap&
|
||||
operator=(unordered_multimap&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -129,9 +129,12 @@ namespace __profile
|
|||
unordered_set&
|
||||
operator=(unordered_set&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@ -343,9 +346,12 @@ namespace __profile
|
|||
unordered_multiset&
|
||||
operator=(unordered_multiset&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -140,9 +140,12 @@ namespace __profile
|
|||
vector&
|
||||
operator=(vector&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -229,9 +229,12 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
|
|||
unordered_map&
|
||||
operator=(unordered_map&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@ -312,9 +315,12 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
|
|||
unordered_multimap&
|
||||
operator=(unordered_multimap&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// TR1 unordered_set -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -222,9 +222,12 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
|
|||
unordered_set&
|
||||
operator=(unordered_set&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@ -302,9 +305,12 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
|
|||
unordered_multiset&
|
||||
operator=(unordered_multiset&& __x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
if (this != &__x)
|
||||
{
|
||||
// NB: DR 675.
|
||||
this->clear();
|
||||
this->swap(__x);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
// { dg-do compile }
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||
|
@ -19,37 +18,25 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
// NOTE: This makes use of the fact that we know how moveable
|
||||
// is implemented on deque (via swap). If the implementation changed
|
||||
// this test may begin to fail.
|
||||
|
||||
#include <deque>
|
||||
#include <iterator>
|
||||
#include <testsuite_iterators.h>
|
||||
#include <testsuite_rvalref.h>
|
||||
#include <utility>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
using namespace __gnu_test;
|
||||
typedef std::deque<rvalstruct> test_type;
|
||||
int main()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
// Empty constructor doesn't require a copy constructor
|
||||
void
|
||||
test01()
|
||||
{ test_type d; }
|
||||
std::deque<int> a,b;
|
||||
a.push_back(1);
|
||||
b = std::move(a);
|
||||
VERIFY( b.size() == 1 && b[0] == 1 && a.size() == 0 );
|
||||
|
||||
// Constructing from a range that returns rvalue references doesn't
|
||||
// require a copy constructor.
|
||||
void
|
||||
test02(rvalstruct* begin, rvalstruct* end)
|
||||
{
|
||||
test_type d(std::make_move_iterator(begin), std::make_move_iterator(end));
|
||||
std::deque<int> c(std::move(b));
|
||||
VERIFY( c.size() == 1 && c[0] == 1 );
|
||||
VERIFY( b.size() == 0 );
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Constructing from a input iterator range that returns rvalue
|
||||
// references doesn't require a copy constructor either.
|
||||
void
|
||||
test03(input_iterator_wrapper<rvalstruct> begin,
|
||||
input_iterator_wrapper<rvalstruct> end)
|
||||
{
|
||||
test_type d(std::make_move_iterator(begin), std::make_move_iterator(end));
|
||||
}
|
||||
|
||||
// Neither does destroying one.
|
||||
void
|
||||
test04(test_type* d)
|
||||
{ delete d; }
|
||||
|
|
55
libstdc++-v3/testsuite/23_containers/deque/cons/moveable2.cc
Normal file
55
libstdc++-v3/testsuite/23_containers/deque/cons/moveable2.cc
Normal file
|
@ -0,0 +1,55 @@
|
|||
// { dg-do compile }
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
#include <deque>
|
||||
#include <iterator>
|
||||
#include <testsuite_iterators.h>
|
||||
#include <testsuite_rvalref.h>
|
||||
|
||||
using namespace __gnu_test;
|
||||
typedef std::deque<rvalstruct> test_type;
|
||||
|
||||
// Empty constructor doesn't require a copy constructor
|
||||
void
|
||||
test01()
|
||||
{ test_type d; }
|
||||
|
||||
// Constructing from a range that returns rvalue references doesn't
|
||||
// require a copy constructor.
|
||||
void
|
||||
test02(rvalstruct* begin, rvalstruct* end)
|
||||
{
|
||||
test_type d(std::make_move_iterator(begin), std::make_move_iterator(end));
|
||||
}
|
||||
|
||||
// Constructing from a input iterator range that returns rvalue
|
||||
// references doesn't require a copy constructor either.
|
||||
void
|
||||
test03(input_iterator_wrapper<rvalstruct> begin,
|
||||
input_iterator_wrapper<rvalstruct> end)
|
||||
{
|
||||
test_type d(std::make_move_iterator(begin), std::make_move_iterator(end));
|
||||
}
|
||||
|
||||
// Neither does destroying one.
|
||||
void
|
||||
test04(test_type* d)
|
||||
{ delete d; }
|
|
@ -0,0 +1,40 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <deque>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::deque<int> d0(10, 1);
|
||||
const std::deque<int> d1(d0);
|
||||
d0 = std::move(d0);
|
||||
VERIFY( d0.size() == 10 );
|
||||
VERIFY( d0 == d1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -18,7 +18,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1575 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1578 }
|
||||
// { dg-excess-errors "" }
|
||||
|
||||
#include <deque>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1514 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1517 }
|
||||
// { dg-excess-errors "" }
|
||||
|
||||
#include <deque>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1514 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1517 }
|
||||
// { dg-excess-errors "" }
|
||||
|
||||
#include <deque>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1659 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1662 }
|
||||
// { dg-excess-errors "" }
|
||||
|
||||
#include <deque>
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -17,26 +19,22 @@
|
|||
// with this library; see the file COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
// NOTE: This makes use of the fact that we know how moveable
|
||||
// is implemented on deque (via swap). If the implementation changed
|
||||
// this test may begin to fail.
|
||||
|
||||
#include <deque>
|
||||
#include <utility>
|
||||
#include <forward_list>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
int main()
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::deque<int> a,b;
|
||||
a.push_back(1);
|
||||
b = std::move(a);
|
||||
VERIFY( b.size() == 1 && b[0] == 1 && a.size() == 0 );
|
||||
std::forward_list<int> fl0(10, 1);
|
||||
const std::forward_list<int> fl1(fl0);
|
||||
fl0 = std::move(fl0);
|
||||
// VERIFY( fl0.size() == 10 );
|
||||
VERIFY( fl0 == fl1 );
|
||||
}
|
||||
|
||||
std::deque<int> c(std::move(b));
|
||||
VERIFY( c.size() == 1 && c[0] == 1 );
|
||||
VERIFY( b.size() == 0 );
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <list>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::list<int> l0(10, 1);
|
||||
const std::list<int> l1(l0);
|
||||
l0 = std::move(l0);
|
||||
VERIFY( l0.size() == 10 );
|
||||
VERIFY( l0 == l1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
// 2007-04-27 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
// Copyright (C) 2007, 2008, 2009 Free Software Foundation
|
||||
// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -18,7 +18,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1409 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1412 }
|
||||
// { dg-excess-errors "" }
|
||||
|
||||
#include <list>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1378 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1381 }
|
||||
// { dg-excess-errors "" }
|
||||
|
||||
#include <list>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// 2007-04-27 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
// Copyright (C) 2007, 2008, 2009 Free Software Foundation
|
||||
// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -18,7 +18,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1378 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1381 }
|
||||
// { dg-excess-errors "" }
|
||||
|
||||
#include <list>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// 2007-04-27 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
// Copyright (C) 2007, 2008, 2009 Free Software Foundation
|
||||
// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -18,7 +18,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1378 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1381 }
|
||||
// { dg-excess-errors "" }
|
||||
|
||||
#include <list>
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <map>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
typedef std::map<int, int> map_type;
|
||||
typedef map_type::value_type value_type;
|
||||
|
||||
map_type m0{ value_type(1, 1), value_type(2, 2), value_type(3, 3) };
|
||||
|
||||
const map_type m1(m0);
|
||||
m0 = std::move(m0);
|
||||
VERIFY( m0.size() == 3 );
|
||||
VERIFY( m0 == m1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <map>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
typedef std::multimap<int, int> mmap_type;
|
||||
typedef mmap_type::value_type value_type;
|
||||
|
||||
mmap_type mm0{ value_type(1, 1), value_type(2, 2), value_type(3, 3) };
|
||||
|
||||
const mmap_type mm1(mm0);
|
||||
mm0 = std::move(mm0);
|
||||
VERIFY( mm0.size() == 3 );
|
||||
VERIFY( mm0 == mm1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <set>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
typedef std::multiset<int> mset_type;
|
||||
|
||||
mset_type ms0{ 1, 2, 3 };
|
||||
|
||||
const mset_type ms1(ms0);
|
||||
ms0 = std::move(ms0);
|
||||
VERIFY( ms0.size() == 3 );
|
||||
VERIFY( ms0 == ms1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <set>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
typedef std::set<int> set_type;
|
||||
|
||||
set_type s0{ 1, 2, 3 };
|
||||
|
||||
const set_type s1(s0);
|
||||
s0 = std::move(s0);
|
||||
VERIFY( s0.size() == 3 );
|
||||
VERIFY( s0 == s1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <unordered_map>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
typedef std::unordered_map<int, int> umap_type;
|
||||
typedef umap_type::value_type value_type;
|
||||
|
||||
umap_type um0{ value_type(1, 1), value_type(2, 2), value_type(3, 3) };
|
||||
|
||||
const umap_type um1(um0);
|
||||
um0 = std::move(um0);
|
||||
VERIFY( um0.size() == 3 );
|
||||
// VERIFY( um0 == um1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <unordered_map>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
typedef std::unordered_multimap<int, int> ummap_type;
|
||||
typedef ummap_type::value_type value_type;
|
||||
|
||||
ummap_type umm0{ value_type(1, 1), value_type(2, 2), value_type(3, 3) };
|
||||
|
||||
const ummap_type umm1(umm0);
|
||||
umm0 = std::move(umm0);
|
||||
VERIFY( umm0.size() == 3 );
|
||||
// VERIFY( umm0 == umm1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <unordered_set>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
typedef std::unordered_multiset<int> umset_type;
|
||||
|
||||
umset_type ums0{ 1, 2, 3 };
|
||||
|
||||
const umset_type ums1(ums0);
|
||||
ums0 = std::move(ums0);
|
||||
VERIFY( ums0.size() == 3 );
|
||||
// VERIFY( ums0 == ums1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <unordered_set>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
typedef std::unordered_set<int> uset_type;
|
||||
|
||||
uset_type us0{ 1, 2, 3 };
|
||||
|
||||
const uset_type us1(us0);
|
||||
us0 = std::move(us0);
|
||||
VERIFY( us0.size() == 3 );
|
||||
// VERIFY( us0 == us1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -1,4 +1,3 @@
|
|||
// { dg-do compile }
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||
|
@ -19,37 +18,45 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
// NOTE: This makes use of the fact that we know how moveable
|
||||
// is implemented on vector (via swap). If the implementation changed
|
||||
// this test may begin to fail.
|
||||
|
||||
#include <vector>
|
||||
#include <iterator>
|
||||
#include <testsuite_iterators.h>
|
||||
#include <testsuite_rvalref.h>
|
||||
#include <utility>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
using namespace __gnu_test;
|
||||
typedef std::vector<rvalstruct> test_type;
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
// Empty constructor doesn't require a copy constructor
|
||||
void
|
||||
test01()
|
||||
{ test_type d; }
|
||||
std::vector<int> a,b;
|
||||
a.push_back(1);
|
||||
b = std::move(a);
|
||||
VERIFY( b.size() == 1 && b[0] == 1 && a.size() == 0 );
|
||||
|
||||
// Constructing from a range that returns rvalue references doesn't
|
||||
// require a copy constructor.
|
||||
void
|
||||
test02(rvalstruct* begin, rvalstruct* end)
|
||||
{
|
||||
test_type d(std::make_move_iterator(begin), std::make_move_iterator(end));
|
||||
std::vector<int> c(std::move(b));
|
||||
VERIFY( c.size() == 1 && c[0] == 1 );
|
||||
VERIFY( b.size() == 0 );
|
||||
}
|
||||
|
||||
// Constructing from a input iterator range that returns rvalue
|
||||
// references doesn't require a copy constructor either.
|
||||
void
|
||||
test03(input_iterator_wrapper<rvalstruct> begin,
|
||||
input_iterator_wrapper<rvalstruct> end)
|
||||
{
|
||||
test_type d(std::make_move_iterator(begin), std::make_move_iterator(end));
|
||||
void test02()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::vector<bool> a,b;
|
||||
a.push_back(1);
|
||||
b = std::move(a);
|
||||
VERIFY( b.size() == 1 && b[0] == 1 && a.size() == 0 );
|
||||
|
||||
std::vector<bool> c(std::move(b));
|
||||
VERIFY( c.size() == 1 && c[0] == 1 );
|
||||
VERIFY( b.size() == 0 );
|
||||
}
|
||||
|
||||
// Neither does destroying one.
|
||||
void
|
||||
test04(test_type* d)
|
||||
{ delete d; }
|
||||
int main(void)
|
||||
{
|
||||
test01();
|
||||
test02();
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
// { dg-do compile }
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
#include <vector>
|
||||
#include <iterator>
|
||||
#include <testsuite_iterators.h>
|
||||
#include <testsuite_rvalref.h>
|
||||
|
||||
using namespace __gnu_test;
|
||||
typedef std::vector<rvalstruct> test_type;
|
||||
|
||||
// Empty constructor doesn't require a copy constructor
|
||||
void
|
||||
test01()
|
||||
{ test_type d; }
|
||||
|
||||
// Constructing from a range that returns rvalue references doesn't
|
||||
// require a copy constructor.
|
||||
void
|
||||
test02(rvalstruct* begin, rvalstruct* end)
|
||||
{
|
||||
test_type d(std::make_move_iterator(begin), std::make_move_iterator(end));
|
||||
}
|
||||
|
||||
// Constructing from a input iterator range that returns rvalue
|
||||
// references doesn't require a copy constructor either.
|
||||
void
|
||||
test03(input_iterator_wrapper<rvalstruct> begin,
|
||||
input_iterator_wrapper<rvalstruct> end)
|
||||
{
|
||||
test_type d(std::make_move_iterator(begin), std::make_move_iterator(end));
|
||||
}
|
||||
|
||||
// Neither does destroying one.
|
||||
void
|
||||
test04(test_type* d)
|
||||
{ delete d; }
|
|
@ -1,6 +1,8 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -17,46 +19,22 @@
|
|||
// with this library; see the file COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
// NOTE: This makes use of the fact that we know how moveable
|
||||
// is implemented on vector (via swap). If the implementation changed
|
||||
// this test may begin to fail.
|
||||
|
||||
#include <vector>
|
||||
#include <utility>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::vector<int> a,b;
|
||||
a.push_back(1);
|
||||
b = std::move(a);
|
||||
VERIFY( b.size() == 1 && b[0] == 1 && a.size() == 0 );
|
||||
|
||||
std::vector<int> c(std::move(b));
|
||||
VERIFY( c.size() == 1 && c[0] == 1 );
|
||||
VERIFY( b.size() == 0 );
|
||||
std::vector<int> v0(10, 1);
|
||||
const std::vector<int> v1(v0);
|
||||
v0 = std::move(v0);
|
||||
VERIFY( v0.size() == 10 );
|
||||
VERIFY( v0 == v1 );
|
||||
}
|
||||
|
||||
void test02()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::vector<bool> a,b;
|
||||
a.push_back(1);
|
||||
b = std::move(a);
|
||||
VERIFY( b.size() == 1 && b[0] == 1 && a.size() == 0 );
|
||||
|
||||
std::vector<bool> c(std::move(b));
|
||||
VERIFY( c.size() == 1 && c[0] == 1 );
|
||||
VERIFY( b.size() == 0 );
|
||||
}
|
||||
|
||||
int main(void)
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
test02();
|
||||
return 0;
|
||||
}
|
|
@ -18,7 +18,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1054 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1057 }
|
||||
// { dg-excess-errors "" }
|
||||
|
||||
#include <vector>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 994 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 997 }
|
||||
// { dg-excess-errors "" }
|
||||
|
||||
#include <vector>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 994 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 997 }
|
||||
// { dg-excess-errors "" }
|
||||
|
||||
#include <vector>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1095 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 1098 }
|
||||
// { dg-excess-errors "" }
|
||||
|
||||
#include <vector>
|
||||
|
|
41
libstdc++-v3/testsuite/ext/vstring/cons/self_move_assign.cc
Normal file
41
libstdc++-v3/testsuite/ext/vstring/cons/self_move_assign.cc
Normal file
|
@ -0,0 +1,41 @@
|
|||
// { dg-options "-std=gnu++0x" }
|
||||
// { dg-require-string-conversions "" }
|
||||
|
||||
// 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <ext/vstring.h>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
__gnu_cxx::__vstring vs0(10, 'a');
|
||||
const __gnu_cxx::__vstring vs1(vs0);
|
||||
vs0 = std::move(vs0);
|
||||
VERIFY( vs0.size() == 10 );
|
||||
VERIFY( vs0 == vs1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue