1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <vector> 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm> 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <string> 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <rope> 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <slist> 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <list> 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <deque> 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <set> 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <map> 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <unordered_set> 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <unordered_map> 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <hash_set> 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <hash_map> 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <queue> 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <stack> 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "mvctor_test.h" 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std; 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (STLPORT) 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std::tr1; 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (__GNUC__) && defined (_STLP_USE_NAMESPACES) 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// libstdc++ sometimes exposed its own __true_type in 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// global namespace resulting in an ambiguity. 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define __true_type std::__true_type 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define __false_type std::__false_type 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic bool type_to_bool(__true_type) 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return true; } 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic bool type_to_bool(__false_type) 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return false; } 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Tp> 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic bool is_movable(const _Tp&) { 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __move_traits<_Tp>::implemented _MovableTp; 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_bool(_MovableTp()); 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Tp> 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic bool is_move_complete(const _Tp&) { 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __move_traits<_Tp> _TpMoveTraits; 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename _TpMoveTraits::complete _TpMoveComplete; 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return type_to_bool(_TpMoveComplete()); 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct specially_allocated_struct { 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott bool operator < (const specially_allocated_struct&) const; 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (__DMC__) // slist<_Tp,_Alloc>::remove error 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott bool operator==(const specially_allocated_struct&) const; 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__DMC__) 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottbool specially_allocated_struct::operator < (const specially_allocated_struct&) const 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return false; } 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct struct_with_specialized_less {}; 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_USE_NAMESPACES) 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottnamespace std { 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott class allocator<specially_allocated_struct> { 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //This allocator just represent what a STLport could do and in this 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //case the STL containers implemented with it should still be movable 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //but not completely as we cannot do any hypothesis on what is in this 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //allocator. 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott public: 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef specially_allocated_struct value_type; 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef value_type * pointer; 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef const value_type* const_pointer; 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef value_type& reference; 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef const value_type& const_reference; 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef size_t size_type; 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef ptrdiff_t difference_type; 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_MEMBER_TEMPLATE_CLASSES) 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott template <class _Tp1> struct rebind { 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef allocator<_Tp1> other; 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott allocator() _STLP_NOTHROW {} 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_MEMBER_TEMPLATES) 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott template <class _Tp1> allocator(const allocator<_Tp1>&) _STLP_NOTHROW {} 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott allocator(const allocator&) _STLP_NOTHROW {} 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ~allocator() _STLP_NOTHROW {} 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pointer address(reference __x) const { return &__x; } 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const_pointer address(const_reference __x) const { return &__x; } 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pointer allocate(size_type, const void* = 0) { return 0; } 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void deallocate(pointer, size_type) {} 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type max_size() const _STLP_NOTHROW { return 0; } 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void construct(pointer, const_reference) {} 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void destroy(pointer) {} 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct less<struct_with_specialized_less> { 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott bool operator() (struct_with_specialized_less const&, 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct_with_specialized_less const&) const; 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (_STLP_NO_MOVE_SEMANTIC) 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (__BORLANDC__) && (__BORLANDC__ >= 0x564) 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct __move_traits<vector<specially_allocated_struct> > { 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type implemented; 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __false_type complete; 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct __move_traits<deque<specially_allocated_struct> > { 128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type implemented; 129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __false_type complete; 130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL 132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct __move_traits<list<specially_allocated_struct> > { 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type implemented; 134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __false_type complete; 135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL 137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct __move_traits<slist<specially_allocated_struct> > { 138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type implemented; 139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __false_type complete; 140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL 142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct __move_traits<less<struct_with_specialized_less> > { 143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type implemented; 144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __false_type complete; 145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL 147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct __move_traits<set<specially_allocated_struct> > { 148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type implemented; 149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __false_type complete; 150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL 152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct __move_traits<multiset<specially_allocated_struct> > { 153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type implemented; 154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __false_type complete; 155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_USE_NAMESPACES) 161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MoveConstructorTest::movable_declaration() 166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \ 168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott !defined (_STLP_NO_MOVE_SEMANTIC) 169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //This test purpose is to check correct detection of the STL movable 170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //traits declaration 171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //string, wstring: 173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(string()) ); 174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(string()) ); 176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(string()) ); 178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_HAS_WCHAR_T) 180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(wstring()) ); 181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(wstring()) ); 183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(wstring()) ); 185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //crope, wrope: 192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(crope()) ); 193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(crope()) ); 195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(crope()) ); 197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_HAS_WCHAR_T) 199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(wrope()) ); 200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(wrope()) ); 202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(wrope()) ); 204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //vector: 211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(vector<char>()) ); 212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(vector<specially_allocated_struct>()) ); 213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(vector<char>()) ); 215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(vector<specially_allocated_struct>()) ); 216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(vector<char>()) ); 218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //deque: 223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(deque<char>()) ); 224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(deque<specially_allocated_struct>()) ); 225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(deque<char>()) ); 227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(deque<specially_allocated_struct>()) ); 228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(deque<char>()) ); 230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //list: 235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(list<char>()) ); 236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(list<specially_allocated_struct>()) ); 237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(list<char>()) ); 239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(list<specially_allocated_struct>()) ); 240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(list<char>()) ); 242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //slist: 248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(slist<char>()) ); 249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(slist<specially_allocated_struct>()) ); 250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(slist<char>()) ); 252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(slist<specially_allocated_struct>()) ); 253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(slist<char>()) ); 255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //queue: 261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(queue<char>()) ); 262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(queue<specially_allocated_struct>()) ); 263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(queue<char>()) ); 265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(queue<specially_allocated_struct>()) ); 266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(queue<char>()) ); 268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //stack: 273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(stack<char>()) ); 274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(stack<specially_allocated_struct>()) ); 275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(stack<char>()) ); 277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(stack<specially_allocated_struct>()) ); 278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(stack<char>()) ); 280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MoveConstructorTest::movable_declaration_assoc() 287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \ 289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott !defined (_STLP_NO_MOVE_SEMANTIC) 290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //associative containers, set multiset, map, multimap: 292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //For associative containers it is important that less is correctly recognize as 294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //the STLport less or a user specialized less: 295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(less<char>()) ); 297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(less<struct_with_specialized_less>()) ); 299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //set 301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(set<char>()) ); 302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(set<specially_allocated_struct>()) ); 303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(set<char>()) ); 305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(set<specially_allocated_struct>()) ); 306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(set<char>()) ); 308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //multiset 311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(multiset<char>()) ); 312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(multiset<specially_allocated_struct>()) ); 313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(multiset<char>()) ); 315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(multiset<specially_allocated_struct>()) ); 316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(multiset<char>()) ); 318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //map 321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(map<char, char>()) ); 322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(map<specially_allocated_struct, char>()) ); 323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(map<char, char>()) ); 325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Here even if allocator has been specialized for specially_allocated_struct 326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //this pecialization won't be used in default map instanciation as the default 327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //allocator is allocator<pair<specially_allocated_struct, char> > 328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(map<specially_allocated_struct, char>()) ); 329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(map<char, char>()) ); 331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //multimap 334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(multimap<char, char>()) ); 335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(multimap<specially_allocated_struct, char>()) ); 336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(multimap<char, char>()) ); 338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Idem map remark 339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_move_complete(multimap<specially_allocated_struct, char>()) ); 340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !is_move_complete(multimap<char, char>()) ); 342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MoveConstructorTest::movable_declaration_hash() 348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \ 350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott !defined (_STLP_NO_MOVE_SEMANTIC) 351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //hashed containers, unordered_set unordered_multiset, unordered_map, unordered_multimap, 353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // hash_set, hash_multiset, hash_map, hash_multimap: 354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //We only check that they are movable, completness is not yet supported 356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(unordered_set<char>()) ); 357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(unordered_multiset<char>()) ); 358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(unordered_map<char, char>()) ); 359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(unordered_multimap<char, char>()) ); 360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(hash_set<char>()) ); 362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(hash_multiset<char>()) ); 363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(hash_map<char, char>()) ); 364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( is_movable(hash_multimap<char, char>()) ); 365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 370