re PR libstdc++/21770 (rebinding allocator::value type vs. container::value_type)
2005-06-03 Paolo Carlini <pcarlini@suse.de> PR libstdc++/21770 * include/bits/stl_deque.h: Add concept-check. In class _Deque_base rebind _Alloc to _Tp_alloc_type, change _Deque_impl to inherit from the latter and add _M_get_Tp_allocator() which returns it. Use everywhere _M_get_Tp_allocator() instead of get_allocator(). * include/bits/deque.tcc: Likewise, use _M_get_Tp_allocator(). * include/bits/stl_list.h: Add concept-check. In class _List_base rebind _Alloc to _Tp_alloc_type and add _M_get_Tp_allocator(), which returns the allocator (of type _Node_alloc_type) converted to _Tp_alloc_type. Use everywhere _M_get_Tp_allocator() instead of get_allocator(). * include/bits/list.tcc: Likewise, use _M_get_Tp_allocator(). * include/bits/stl_vector.h: Add concept-check. In class _Vector_base rebind _Alloc to _Tp_alloc_type, change _Vector_impl to inherit from the latter and add _M_get_Tp_allocator() which returns it. Use everywhere _M_get_Tp_allocator() instead of get_allocator(). * include/bits/vector.tcc: Likewise, use _M_get_Tp_allocator(). * include/bits/stl_map.h: Add concept-check. Rebind _Alloc to _Pair_alloc_type and use it for _Rb_tree. * include/bits/stl_multimap.h: Likewise. * include/bits/stl_multiset.h: Add concept-check. Rebind _Alloc to _Key_alloc_type and use it for _Rb_tree. * include/bits/stl_set.h: Likewise. * include/bits/basic_string.h: Rebind _Alloc to _CharT_alloc_type and use it for the allocator typedefs. * testsuite/21_strings/basic_string/1.cc: New. * testsuite/23_containers/deque/explicit_instantiation.cc: Move to... * testsuite/23_containers/deque/explicit_instantiation/1.cc: ... here. * testsuite/23_containers/deque/explicit_instantiation/3.cc: New. * testsuite/23_containers/list/explicit_instantiation.cc: Move to... * testsuite/23_containers/list/explicit_instantiation/1.cc: ... here. * testsuite/23_containers/list/explicit_instantiation/3.cc: New. * testsuite/23_containers/map/explicit_instantiation.cc: Move to... * testsuite/23_containers/map/explicit_instantiation/1.cc: ... here. * testsuite/23_containers/map/explicit_instantiation/3.cc: New. * testsuite/23_containers/multimap/explicit_instantiation.cc: Move to... * testsuite/23_containers/multimap/explicit_instantiation/1.cc: .. here. * testsuite/23_containers/multimap/explicit_instantiation/3.cc: New. * testsuite/23_containers/multiset/explicit_instantiation.cc: Move to... * testsuite/23_containers/multiset/explicit_instantiation/1.cc: .. here. * testsuite/23_containers/multiset/explicit_instantiation/3.cc: New. * testsuite/23_containers/set/explicit_instantiation.cc: Move to... * testsuite/23_containers/set/explicit_instantiation/1.cc: .. here. * testsuite/23_containers/set/explicit_instantiation/3.cc: New. * testsuite/23_containers/vector/explicit_instantiation.cc: Move to... * testsuite/23_containers/vector/explicit_instantiation/1.cc: ... here. * testsuite/23_containers/vector/explicit_instantiation/3.cc: New. From-SVN: r100546
This commit is contained in:
parent
7e45bd18da
commit
4fd20a8f82
27 changed files with 658 additions and 264 deletions
|
@ -1,3 +1,53 @@
|
||||||
|
2005-06-03 Paolo Carlini <pcarlini@suse.de>
|
||||||
|
|
||||||
|
PR libstdc++/21770
|
||||||
|
* include/bits/stl_deque.h: Add concept-check. In class _Deque_base
|
||||||
|
rebind _Alloc to _Tp_alloc_type, change _Deque_impl to inherit from
|
||||||
|
the latter and add _M_get_Tp_allocator() which returns it. Use
|
||||||
|
everywhere _M_get_Tp_allocator() instead of get_allocator().
|
||||||
|
* include/bits/deque.tcc: Likewise, use _M_get_Tp_allocator().
|
||||||
|
* include/bits/stl_list.h: Add concept-check. In class _List_base
|
||||||
|
rebind _Alloc to _Tp_alloc_type and add _M_get_Tp_allocator(), which
|
||||||
|
returns the allocator (of type _Node_alloc_type) converted to
|
||||||
|
_Tp_alloc_type. Use everywhere _M_get_Tp_allocator() instead of
|
||||||
|
get_allocator().
|
||||||
|
* include/bits/list.tcc: Likewise, use _M_get_Tp_allocator().
|
||||||
|
* include/bits/stl_vector.h: Add concept-check. In class _Vector_base
|
||||||
|
rebind _Alloc to _Tp_alloc_type, change _Vector_impl to inherit from
|
||||||
|
the latter and add _M_get_Tp_allocator() which returns it. Use
|
||||||
|
everywhere _M_get_Tp_allocator() instead of get_allocator().
|
||||||
|
* include/bits/vector.tcc: Likewise, use _M_get_Tp_allocator().
|
||||||
|
* include/bits/stl_map.h: Add concept-check. Rebind _Alloc to
|
||||||
|
_Pair_alloc_type and use it for _Rb_tree.
|
||||||
|
* include/bits/stl_multimap.h: Likewise.
|
||||||
|
* include/bits/stl_multiset.h: Add concept-check. Rebind _Alloc to
|
||||||
|
_Key_alloc_type and use it for _Rb_tree.
|
||||||
|
* include/bits/stl_set.h: Likewise.
|
||||||
|
* include/bits/basic_string.h: Rebind _Alloc to _CharT_alloc_type and
|
||||||
|
use it for the allocator typedefs.
|
||||||
|
* testsuite/21_strings/basic_string/1.cc: New.
|
||||||
|
* testsuite/23_containers/deque/explicit_instantiation.cc: Move to...
|
||||||
|
* testsuite/23_containers/deque/explicit_instantiation/1.cc: ... here.
|
||||||
|
* testsuite/23_containers/deque/explicit_instantiation/3.cc: New.
|
||||||
|
* testsuite/23_containers/list/explicit_instantiation.cc: Move to...
|
||||||
|
* testsuite/23_containers/list/explicit_instantiation/1.cc: ... here.
|
||||||
|
* testsuite/23_containers/list/explicit_instantiation/3.cc: New.
|
||||||
|
* testsuite/23_containers/map/explicit_instantiation.cc: Move to...
|
||||||
|
* testsuite/23_containers/map/explicit_instantiation/1.cc: ... here.
|
||||||
|
* testsuite/23_containers/map/explicit_instantiation/3.cc: New.
|
||||||
|
* testsuite/23_containers/multimap/explicit_instantiation.cc: Move to...
|
||||||
|
* testsuite/23_containers/multimap/explicit_instantiation/1.cc: .. here.
|
||||||
|
* testsuite/23_containers/multimap/explicit_instantiation/3.cc: New.
|
||||||
|
* testsuite/23_containers/multiset/explicit_instantiation.cc: Move to...
|
||||||
|
* testsuite/23_containers/multiset/explicit_instantiation/1.cc: .. here.
|
||||||
|
* testsuite/23_containers/multiset/explicit_instantiation/3.cc: New.
|
||||||
|
* testsuite/23_containers/set/explicit_instantiation.cc: Move to...
|
||||||
|
* testsuite/23_containers/set/explicit_instantiation/1.cc: .. here.
|
||||||
|
* testsuite/23_containers/set/explicit_instantiation/3.cc: New.
|
||||||
|
* testsuite/23_containers/vector/explicit_instantiation.cc: Move to...
|
||||||
|
* testsuite/23_containers/vector/explicit_instantiation/1.cc: ... here.
|
||||||
|
* testsuite/23_containers/vector/explicit_instantiation/3.cc: New.
|
||||||
|
|
||||||
2005-06-02 Nathan Sidwell <nathan@codesourcery.com>
|
2005-06-02 Nathan Sidwell <nathan@codesourcery.com>
|
||||||
|
|
||||||
PR c++/21280
|
PR c++/21280
|
||||||
|
|
|
@ -109,17 +109,19 @@ namespace std
|
||||||
template<typename _CharT, typename _Traits, typename _Alloc>
|
template<typename _CharT, typename _Traits, typename _Alloc>
|
||||||
class basic_string
|
class basic_string
|
||||||
{
|
{
|
||||||
|
typedef typename _Alloc::template rebind<_CharT>::other _CharT_alloc_type;
|
||||||
|
|
||||||
// Types:
|
// Types:
|
||||||
public:
|
public:
|
||||||
typedef _Traits traits_type;
|
typedef _Traits traits_type;
|
||||||
typedef typename _Traits::char_type value_type;
|
typedef typename _Traits::char_type value_type;
|
||||||
typedef _Alloc allocator_type;
|
typedef _Alloc allocator_type;
|
||||||
typedef typename _Alloc::size_type size_type;
|
typedef typename _CharT_alloc_type::size_type size_type;
|
||||||
typedef typename _Alloc::difference_type difference_type;
|
typedef typename _CharT_alloc_type::difference_type difference_type;
|
||||||
typedef typename _Alloc::reference reference;
|
typedef typename _CharT_alloc_type::reference reference;
|
||||||
typedef typename _Alloc::const_reference const_reference;
|
typedef typename _CharT_alloc_type::const_reference const_reference;
|
||||||
typedef typename _Alloc::pointer pointer;
|
typedef typename _CharT_alloc_type::pointer pointer;
|
||||||
typedef typename _Alloc::const_pointer const_pointer;
|
typedef typename _CharT_alloc_type::const_pointer const_pointer;
|
||||||
typedef __gnu_cxx::__normal_iterator<pointer, basic_string> iterator;
|
typedef __gnu_cxx::__normal_iterator<pointer, basic_string> iterator;
|
||||||
typedef __gnu_cxx::__normal_iterator<const_pointer, basic_string>
|
typedef __gnu_cxx::__normal_iterator<const_pointer, basic_string>
|
||||||
const_iterator;
|
const_iterator;
|
||||||
|
|
|
@ -147,7 +147,7 @@ namespace _GLIBCXX_STD
|
||||||
std::copy_backward(this->_M_impl._M_start, __first, __last);
|
std::copy_backward(this->_M_impl._M_start, __first, __last);
|
||||||
iterator __new_start = this->_M_impl._M_start + __n;
|
iterator __new_start = this->_M_impl._M_start + __n;
|
||||||
std::_Destroy(this->_M_impl._M_start, __new_start,
|
std::_Destroy(this->_M_impl._M_start, __new_start,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
_M_destroy_nodes(this->_M_impl._M_start._M_node,
|
_M_destroy_nodes(this->_M_impl._M_start._M_node,
|
||||||
__new_start._M_node);
|
__new_start._M_node);
|
||||||
this->_M_impl._M_start = __new_start;
|
this->_M_impl._M_start = __new_start;
|
||||||
|
@ -157,7 +157,7 @@ namespace _GLIBCXX_STD
|
||||||
std::copy(__last, this->_M_impl._M_finish, __first);
|
std::copy(__last, this->_M_impl._M_finish, __first);
|
||||||
iterator __new_finish = this->_M_impl._M_finish - __n;
|
iterator __new_finish = this->_M_impl._M_finish - __n;
|
||||||
std::_Destroy(__new_finish, this->_M_impl._M_finish,
|
std::_Destroy(__new_finish, this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
_M_destroy_nodes(__new_finish._M_node + 1,
|
_M_destroy_nodes(__new_finish._M_node + 1,
|
||||||
this->_M_impl._M_finish._M_node + 1);
|
this->_M_impl._M_finish._M_node + 1);
|
||||||
this->_M_impl._M_finish = __new_finish;
|
this->_M_impl._M_finish = __new_finish;
|
||||||
|
@ -176,7 +176,7 @@ namespace _GLIBCXX_STD
|
||||||
++__node)
|
++__node)
|
||||||
{
|
{
|
||||||
std::_Destroy(*__node, *__node + _S_buffer_size(),
|
std::_Destroy(*__node, *__node + _S_buffer_size(),
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
_M_deallocate_node(*__node);
|
_M_deallocate_node(*__node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,16 +184,16 @@ namespace _GLIBCXX_STD
|
||||||
{
|
{
|
||||||
std::_Destroy(this->_M_impl._M_start._M_cur,
|
std::_Destroy(this->_M_impl._M_start._M_cur,
|
||||||
this->_M_impl._M_start._M_last,
|
this->_M_impl._M_start._M_last,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
std::_Destroy(this->_M_impl._M_finish._M_first,
|
std::_Destroy(this->_M_impl._M_finish._M_first,
|
||||||
this->_M_impl._M_finish._M_cur,
|
this->_M_impl._M_finish._M_cur,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
_M_deallocate_node(this->_M_impl._M_finish._M_first);
|
_M_deallocate_node(this->_M_impl._M_finish._M_first);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
std::_Destroy(this->_M_impl._M_start._M_cur,
|
std::_Destroy(this->_M_impl._M_start._M_cur,
|
||||||
this->_M_impl._M_finish._M_cur,
|
this->_M_impl._M_finish._M_cur,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
|
|
||||||
this->_M_impl._M_finish = this->_M_impl._M_start;
|
this->_M_impl._M_finish = this->_M_impl._M_start;
|
||||||
}
|
}
|
||||||
|
@ -226,7 +226,7 @@ namespace _GLIBCXX_STD
|
||||||
{
|
{
|
||||||
std::__uninitialized_fill_a(__new_start, this->_M_impl._M_start,
|
std::__uninitialized_fill_a(__new_start, this->_M_impl._M_start,
|
||||||
__x,
|
__x,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_start = __new_start;
|
this->_M_impl._M_start = __new_start;
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
|
@ -243,7 +243,7 @@ namespace _GLIBCXX_STD
|
||||||
{
|
{
|
||||||
std::__uninitialized_fill_a(this->_M_impl._M_finish,
|
std::__uninitialized_fill_a(this->_M_impl._M_finish,
|
||||||
__new_finish, __x,
|
__new_finish, __x,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish = __new_finish;
|
this->_M_impl._M_finish = __new_finish;
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
|
@ -269,15 +269,15 @@ namespace _GLIBCXX_STD
|
||||||
__cur < this->_M_impl._M_finish._M_node;
|
__cur < this->_M_impl._M_finish._M_node;
|
||||||
++__cur)
|
++__cur)
|
||||||
std::__uninitialized_fill_a(*__cur, *__cur + _S_buffer_size(),
|
std::__uninitialized_fill_a(*__cur, *__cur + _S_buffer_size(),
|
||||||
__value, this->get_allocator());
|
__value, _M_get_Tp_allocator());
|
||||||
std::__uninitialized_fill_a(this->_M_impl._M_finish._M_first,
|
std::__uninitialized_fill_a(this->_M_impl._M_finish._M_first,
|
||||||
this->_M_impl._M_finish._M_cur,
|
this->_M_impl._M_finish._M_cur,
|
||||||
__value, this->get_allocator());
|
__value, _M_get_Tp_allocator());
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur),
|
std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur),
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
__throw_exception_again;
|
__throw_exception_again;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -322,18 +322,18 @@ namespace _GLIBCXX_STD
|
||||||
_ForwardIterator __mid = __first;
|
_ForwardIterator __mid = __first;
|
||||||
std::advance(__mid, _S_buffer_size());
|
std::advance(__mid, _S_buffer_size());
|
||||||
std::__uninitialized_copy_a(__first, __mid, *__cur_node,
|
std::__uninitialized_copy_a(__first, __mid, *__cur_node,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
__first = __mid;
|
__first = __mid;
|
||||||
}
|
}
|
||||||
std::__uninitialized_copy_a(__first, __last,
|
std::__uninitialized_copy_a(__first, __last,
|
||||||
this->_M_impl._M_finish._M_first,
|
this->_M_impl._M_finish._M_first,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
std::_Destroy(this->_M_impl._M_start,
|
std::_Destroy(this->_M_impl._M_start,
|
||||||
iterator(*__cur_node, __cur_node),
|
iterator(*__cur_node, __cur_node),
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
__throw_exception_again;
|
__throw_exception_again;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -435,7 +435,7 @@ namespace _GLIBCXX_STD
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
std::__uninitialized_copy_a(__first, __last, __new_start,
|
std::__uninitialized_copy_a(__first, __last, __new_start,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_start = __new_start;
|
this->_M_impl._M_start = __new_start;
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
|
@ -452,7 +452,7 @@ namespace _GLIBCXX_STD
|
||||||
{
|
{
|
||||||
std::__uninitialized_copy_a(__first, __last,
|
std::__uninitialized_copy_a(__first, __last,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish = __new_finish;
|
this->_M_impl._M_finish = __new_finish;
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
|
@ -520,7 +520,7 @@ namespace _GLIBCXX_STD
|
||||||
+ difference_type(__n));
|
+ difference_type(__n));
|
||||||
std::__uninitialized_copy_a(this->_M_impl._M_start,
|
std::__uninitialized_copy_a(this->_M_impl._M_start,
|
||||||
__start_n, __new_start,
|
__start_n, __new_start,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_start = __new_start;
|
this->_M_impl._M_start = __new_start;
|
||||||
std::copy(__start_n, __pos, __old_start);
|
std::copy(__start_n, __pos, __old_start);
|
||||||
fill(__pos - difference_type(__n), __pos, __x_copy);
|
fill(__pos - difference_type(__n), __pos, __x_copy);
|
||||||
|
@ -531,7 +531,7 @@ namespace _GLIBCXX_STD
|
||||||
__pos, __new_start,
|
__pos, __new_start,
|
||||||
this->_M_impl._M_start,
|
this->_M_impl._M_start,
|
||||||
__x_copy,
|
__x_copy,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_start = __new_start;
|
this->_M_impl._M_start = __new_start;
|
||||||
std::fill(__old_start, __pos, __x_copy);
|
std::fill(__old_start, __pos, __x_copy);
|
||||||
}
|
}
|
||||||
|
@ -559,7 +559,7 @@ namespace _GLIBCXX_STD
|
||||||
std::__uninitialized_copy_a(__finish_n,
|
std::__uninitialized_copy_a(__finish_n,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish = __new_finish;
|
this->_M_impl._M_finish = __new_finish;
|
||||||
std::copy_backward(__pos, __finish_n, __old_finish);
|
std::copy_backward(__pos, __finish_n, __old_finish);
|
||||||
std::fill(__pos, __pos + difference_type(__n), __x_copy);
|
std::fill(__pos, __pos + difference_type(__n), __x_copy);
|
||||||
|
@ -570,7 +570,7 @@ namespace _GLIBCXX_STD
|
||||||
__pos + difference_type(__n),
|
__pos + difference_type(__n),
|
||||||
__x_copy, __pos,
|
__x_copy, __pos,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish = __new_finish;
|
this->_M_impl._M_finish = __new_finish;
|
||||||
std::fill(__pos, __old_finish, __x_copy);
|
std::fill(__pos, __old_finish, __x_copy);
|
||||||
}
|
}
|
||||||
|
@ -607,7 +607,7 @@ namespace _GLIBCXX_STD
|
||||||
+ difference_type(__n));
|
+ difference_type(__n));
|
||||||
std::__uninitialized_copy_a(this->_M_impl._M_start,
|
std::__uninitialized_copy_a(this->_M_impl._M_start,
|
||||||
__start_n, __new_start,
|
__start_n, __new_start,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_start = __new_start;
|
this->_M_impl._M_start = __new_start;
|
||||||
std::copy(__start_n, __pos, __old_start);
|
std::copy(__start_n, __pos, __old_start);
|
||||||
std::copy(__first, __last, __pos - difference_type(__n));
|
std::copy(__first, __last, __pos - difference_type(__n));
|
||||||
|
@ -619,7 +619,7 @@ namespace _GLIBCXX_STD
|
||||||
std::__uninitialized_copy_copy(this->_M_impl._M_start,
|
std::__uninitialized_copy_copy(this->_M_impl._M_start,
|
||||||
__pos, __first, __mid,
|
__pos, __first, __mid,
|
||||||
__new_start,
|
__new_start,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_start = __new_start;
|
this->_M_impl._M_start = __new_start;
|
||||||
std::copy(__mid, __last, __old_start);
|
std::copy(__mid, __last, __old_start);
|
||||||
}
|
}
|
||||||
|
@ -647,7 +647,7 @@ namespace _GLIBCXX_STD
|
||||||
std::__uninitialized_copy_a(__finish_n,
|
std::__uninitialized_copy_a(__finish_n,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish = __new_finish;
|
this->_M_impl._M_finish = __new_finish;
|
||||||
std::copy_backward(__pos, __finish_n, __old_finish);
|
std::copy_backward(__pos, __finish_n, __old_finish);
|
||||||
std::copy(__first, __last, __pos);
|
std::copy(__first, __last, __pos);
|
||||||
|
@ -659,7 +659,7 @@ namespace _GLIBCXX_STD
|
||||||
std::__uninitialized_copy_copy(__mid, __last, __pos,
|
std::__uninitialized_copy_copy(__mid, __last, __pos,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish = __new_finish;
|
this->_M_impl._M_finish = __new_finish;
|
||||||
std::copy(__first, __mid, __pos);
|
std::copy(__first, __mid, __pos);
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ namespace _GLIBCXX_STD
|
||||||
{
|
{
|
||||||
_Node* __tmp = __cur;
|
_Node* __tmp = __cur;
|
||||||
__cur = static_cast<_Node*>(__cur->_M_next);
|
__cur = static_cast<_Node*>(__cur->_M_next);
|
||||||
this->get_allocator().destroy(&__tmp->_M_data);
|
_M_get_Tp_allocator().destroy(&__tmp->_M_data);
|
||||||
_M_put_node(__tmp);
|
_M_put_node(__tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -358,7 +358,7 @@ namespace _GLIBCXX_STD
|
||||||
|
|
||||||
allocator_type
|
allocator_type
|
||||||
get_allocator() const
|
get_allocator() const
|
||||||
{ return *static_cast<const _Alloc*>(&this->_M_impl); }
|
{ return _M_get_Tp_allocator(); }
|
||||||
|
|
||||||
typedef _Deque_iterator<_Tp, _Tp&, _Tp*> iterator;
|
typedef _Deque_iterator<_Tp, _Tp&, _Tp*> iterator;
|
||||||
typedef _Deque_iterator<_Tp, const _Tp&, const _Tp*> const_iterator;
|
typedef _Deque_iterator<_Tp, const _Tp&, const _Tp*> const_iterator;
|
||||||
|
@ -377,30 +377,43 @@ namespace _GLIBCXX_STD
|
||||||
//This struct encapsulates the implementation of the std::deque
|
//This struct encapsulates the implementation of the std::deque
|
||||||
//standard container and at the same time makes use of the EBO
|
//standard container and at the same time makes use of the EBO
|
||||||
//for empty allocators.
|
//for empty allocators.
|
||||||
|
typedef typename _Alloc::template rebind<_Tp*>::other _Map_alloc_type;
|
||||||
|
|
||||||
|
typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type;
|
||||||
|
|
||||||
struct _Deque_impl
|
struct _Deque_impl
|
||||||
: public _Alloc
|
: public _Tp_alloc_type
|
||||||
{
|
{
|
||||||
_Tp** _M_map;
|
_Tp** _M_map;
|
||||||
size_t _M_map_size;
|
size_t _M_map_size;
|
||||||
iterator _M_start;
|
iterator _M_start;
|
||||||
iterator _M_finish;
|
iterator _M_finish;
|
||||||
|
|
||||||
_Deque_impl(const _Alloc& __a)
|
_Deque_impl(const _Tp_alloc_type& __a)
|
||||||
: _Alloc(__a), _M_map(0), _M_map_size(0), _M_start(), _M_finish()
|
: _Tp_alloc_type(__a), _M_map(0), _M_map_size(0),
|
||||||
|
_M_start(), _M_finish()
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef typename _Alloc::template rebind<_Tp*>::other _Map_alloc_type;
|
_Tp_alloc_type
|
||||||
_Map_alloc_type _M_get_map_allocator() const
|
_M_get_Tp_allocator() const
|
||||||
{ return _Map_alloc_type(this->get_allocator()); }
|
{ return *static_cast<const _Tp_alloc_type*>(&this->_M_impl); }
|
||||||
|
|
||||||
|
_Map_alloc_type
|
||||||
|
_M_get_map_allocator() const
|
||||||
|
{ return _M_get_Tp_allocator(); }
|
||||||
|
|
||||||
_Tp*
|
_Tp*
|
||||||
_M_allocate_node()
|
_M_allocate_node()
|
||||||
{ return _M_impl._Alloc::allocate(__deque_buf_size(sizeof(_Tp))); }
|
{
|
||||||
|
return _M_impl._Tp_alloc_type::allocate(__deque_buf_size(sizeof(_Tp)));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_M_deallocate_node(_Tp* __p)
|
_M_deallocate_node(_Tp* __p)
|
||||||
{ _M_impl._Alloc::deallocate(__p, __deque_buf_size(sizeof(_Tp))); }
|
{
|
||||||
|
_M_impl._Tp_alloc_type::deallocate(__p, __deque_buf_size(sizeof(_Tp)));
|
||||||
|
}
|
||||||
|
|
||||||
_Tp**
|
_Tp**
|
||||||
_M_allocate_map(size_t __n)
|
_M_allocate_map(size_t __n)
|
||||||
|
@ -595,23 +608,26 @@ namespace _GLIBCXX_STD
|
||||||
class deque : protected _Deque_base<_Tp, _Alloc>
|
class deque : protected _Deque_base<_Tp, _Alloc>
|
||||||
{
|
{
|
||||||
// concept requirements
|
// concept requirements
|
||||||
|
typedef typename _Alloc::value_type _Alloc_value_type;
|
||||||
__glibcxx_class_requires(_Tp, _SGIAssignableConcept)
|
__glibcxx_class_requires(_Tp, _SGIAssignableConcept)
|
||||||
|
__glibcxx_class_requires2(_Tp, _Alloc_value_type, _SameTypeConcept)
|
||||||
|
|
||||||
typedef _Deque_base<_Tp, _Alloc> _Base;
|
typedef _Deque_base<_Tp, _Alloc> _Base;
|
||||||
|
typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef _Tp value_type;
|
typedef _Tp value_type;
|
||||||
typedef typename _Alloc::pointer pointer;
|
typedef typename _Tp_alloc_type::pointer pointer;
|
||||||
typedef typename _Alloc::const_pointer const_pointer;
|
typedef typename _Tp_alloc_type::const_pointer const_pointer;
|
||||||
typedef typename _Alloc::reference reference;
|
typedef typename _Tp_alloc_type::reference reference;
|
||||||
typedef typename _Alloc::const_reference const_reference;
|
typedef typename _Tp_alloc_type::const_reference const_reference;
|
||||||
typedef typename _Base::iterator iterator;
|
typedef typename _Base::iterator iterator;
|
||||||
typedef typename _Base::const_iterator const_iterator;
|
typedef typename _Base::const_iterator const_iterator;
|
||||||
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
||||||
typedef std::reverse_iterator<iterator> reverse_iterator;
|
typedef std::reverse_iterator<iterator> reverse_iterator;
|
||||||
typedef size_t size_type;
|
typedef size_t size_type;
|
||||||
typedef ptrdiff_t difference_type;
|
typedef ptrdiff_t difference_type;
|
||||||
typedef typename _Base::allocator_type allocator_type;
|
typedef _Alloc allocator_type;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
typedef pointer* _Map_pointer;
|
typedef pointer* _Map_pointer;
|
||||||
|
@ -627,6 +643,7 @@ namespace _GLIBCXX_STD
|
||||||
using _Base::_M_deallocate_node;
|
using _Base::_M_deallocate_node;
|
||||||
using _Base::_M_allocate_map;
|
using _Base::_M_allocate_map;
|
||||||
using _Base::_M_deallocate_map;
|
using _Base::_M_deallocate_map;
|
||||||
|
using _Base::_M_get_Tp_allocator;
|
||||||
|
|
||||||
/** @if maint
|
/** @if maint
|
||||||
* A total of four data members accumulated down the heirarchy.
|
* A total of four data members accumulated down the heirarchy.
|
||||||
|
@ -680,7 +697,7 @@ namespace _GLIBCXX_STD
|
||||||
: _Base(__x.get_allocator(), __x.size())
|
: _Base(__x.get_allocator(), __x.size())
|
||||||
{ std::__uninitialized_copy_a(__x.begin(), __x.end(),
|
{ std::__uninitialized_copy_a(__x.begin(), __x.end(),
|
||||||
this->_M_impl._M_start,
|
this->_M_impl._M_start,
|
||||||
this->get_allocator()); }
|
_M_get_Tp_allocator()); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Builds a %deque from a range.
|
* @brief Builds a %deque from a range.
|
||||||
|
@ -713,7 +730,7 @@ namespace _GLIBCXX_STD
|
||||||
*/
|
*/
|
||||||
~deque()
|
~deque()
|
||||||
{ std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
{ std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
||||||
this->get_allocator()); }
|
_M_get_Tp_allocator()); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief %Deque assignment operator.
|
* @brief %Deque assignment operator.
|
||||||
|
|
|
@ -290,18 +290,19 @@ namespace _GLIBCXX_STD
|
||||||
//
|
//
|
||||||
// We put this to the test in the constructors and in
|
// We put this to the test in the constructors and in
|
||||||
// get_allocator, where we use conversions between
|
// get_allocator, where we use conversions between
|
||||||
// allocator_type and _Node_Alloc_type. The conversion is
|
// allocator_type and _Node_alloc_type. The conversion is
|
||||||
// required by table 32 in [20.1.5].
|
// required by table 32 in [20.1.5].
|
||||||
typedef typename _Alloc::template rebind<_List_node<_Tp> >::other
|
typedef typename _Alloc::template rebind<_List_node<_Tp> >::other
|
||||||
|
_Node_alloc_type;
|
||||||
|
|
||||||
_Node_Alloc_type;
|
typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type;
|
||||||
|
|
||||||
struct _List_impl
|
struct _List_impl
|
||||||
: public _Node_Alloc_type
|
: public _Node_alloc_type
|
||||||
{
|
{
|
||||||
_List_node_base _M_node;
|
_List_node_base _M_node;
|
||||||
_List_impl (const _Node_Alloc_type& __a)
|
_List_impl(const _Node_alloc_type& __a)
|
||||||
: _Node_Alloc_type(__a)
|
: _Node_alloc_type(__a)
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -309,19 +310,22 @@ namespace _GLIBCXX_STD
|
||||||
|
|
||||||
_List_node<_Tp>*
|
_List_node<_Tp>*
|
||||||
_M_get_node()
|
_M_get_node()
|
||||||
{ return _M_impl._Node_Alloc_type::allocate(1); }
|
{ return _M_impl._Node_alloc_type::allocate(1); }
|
||||||
|
|
||||||
void
|
void
|
||||||
_M_put_node(_List_node<_Tp>* __p)
|
_M_put_node(_List_node<_Tp>* __p)
|
||||||
{ _M_impl._Node_Alloc_type::deallocate(__p, 1); }
|
{ _M_impl._Node_alloc_type::deallocate(__p, 1); }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef _Alloc allocator_type;
|
typedef _Alloc allocator_type;
|
||||||
|
|
||||||
|
_Tp_alloc_type
|
||||||
|
_M_get_Tp_allocator() const
|
||||||
|
{ return *static_cast<const _Node_alloc_type*>(&this->_M_impl); }
|
||||||
|
|
||||||
allocator_type
|
allocator_type
|
||||||
get_allocator() const
|
get_allocator() const
|
||||||
{ return allocator_type(*static_cast<
|
{ return _M_get_Tp_allocator(); }
|
||||||
const _Node_Alloc_type*>(&this->_M_impl)); }
|
|
||||||
|
|
||||||
_List_base(const allocator_type& __a)
|
_List_base(const allocator_type& __a)
|
||||||
: _M_impl(__a)
|
: _M_impl(__a)
|
||||||
|
@ -391,23 +395,26 @@ namespace _GLIBCXX_STD
|
||||||
class list : protected _List_base<_Tp, _Alloc>
|
class list : protected _List_base<_Tp, _Alloc>
|
||||||
{
|
{
|
||||||
// concept requirements
|
// concept requirements
|
||||||
|
typedef typename _Alloc::value_type _Alloc_value_type;
|
||||||
__glibcxx_class_requires(_Tp, _SGIAssignableConcept)
|
__glibcxx_class_requires(_Tp, _SGIAssignableConcept)
|
||||||
|
__glibcxx_class_requires2(_Tp, _Alloc_value_type, _SameTypeConcept)
|
||||||
|
|
||||||
typedef _List_base<_Tp, _Alloc> _Base;
|
typedef _List_base<_Tp, _Alloc> _Base;
|
||||||
|
typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef _Tp value_type;
|
typedef _Tp value_type;
|
||||||
typedef typename _Alloc::pointer pointer;
|
typedef typename _Tp_alloc_type::pointer pointer;
|
||||||
typedef typename _Alloc::const_pointer const_pointer;
|
typedef typename _Tp_alloc_type::const_pointer const_pointer;
|
||||||
typedef typename _Alloc::reference reference;
|
typedef typename _Tp_alloc_type::reference reference;
|
||||||
typedef typename _Alloc::const_reference const_reference;
|
typedef typename _Tp_alloc_type::const_reference const_reference;
|
||||||
typedef _List_iterator<_Tp> iterator;
|
typedef _List_iterator<_Tp> iterator;
|
||||||
typedef _List_const_iterator<_Tp> const_iterator;
|
typedef _List_const_iterator<_Tp> const_iterator;
|
||||||
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
||||||
typedef std::reverse_iterator<iterator> reverse_iterator;
|
typedef std::reverse_iterator<iterator> reverse_iterator;
|
||||||
typedef size_t size_type;
|
typedef size_t size_type;
|
||||||
typedef ptrdiff_t difference_type;
|
typedef ptrdiff_t difference_type;
|
||||||
typedef typename _Base::allocator_type allocator_type;
|
typedef _Alloc allocator_type;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Note that pointers-to-_Node's can be ctor-converted to
|
// Note that pointers-to-_Node's can be ctor-converted to
|
||||||
|
@ -423,6 +430,7 @@ namespace _GLIBCXX_STD
|
||||||
using _Base::_M_impl;
|
using _Base::_M_impl;
|
||||||
using _Base::_M_put_node;
|
using _Base::_M_put_node;
|
||||||
using _Base::_M_get_node;
|
using _Base::_M_get_node;
|
||||||
|
using _Base::_M_get_Tp_allocator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @if maint
|
* @if maint
|
||||||
|
@ -437,7 +445,7 @@ namespace _GLIBCXX_STD
|
||||||
_Node* __p = this->_M_get_node();
|
_Node* __p = this->_M_get_node();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
this->get_allocator().construct(&__p->_M_data, __x);
|
_M_get_Tp_allocator().construct(&__p->_M_data, __x);
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -1158,7 +1166,7 @@ namespace _GLIBCXX_STD
|
||||||
{
|
{
|
||||||
__position._M_node->unhook();
|
__position._M_node->unhook();
|
||||||
_Node* __n = static_cast<_Node*>(__position._M_node);
|
_Node* __n = static_cast<_Node*>(__position._M_node);
|
||||||
this->get_allocator().destroy(&__n->_M_data);
|
_M_get_Tp_allocator().destroy(&__n->_M_data);
|
||||||
_M_put_node(__n);
|
_M_put_node(__n);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -90,17 +90,22 @@ namespace _GLIBCXX_STD
|
||||||
typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
|
typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
|
||||||
class map
|
class map
|
||||||
{
|
{
|
||||||
// concept requirements
|
|
||||||
__glibcxx_class_requires(_Tp, _SGIAssignableConcept)
|
|
||||||
__glibcxx_class_requires4(_Compare, bool, _Key, _Key,
|
|
||||||
_BinaryFunctionConcept)
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef _Key key_type;
|
typedef _Key key_type;
|
||||||
typedef _Tp mapped_type;
|
typedef _Tp mapped_type;
|
||||||
typedef std::pair<const _Key, _Tp> value_type;
|
typedef std::pair<const _Key, _Tp> value_type;
|
||||||
typedef _Compare key_compare;
|
typedef _Compare key_compare;
|
||||||
|
typedef _Alloc allocator_type;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// concept requirements
|
||||||
|
typedef typename _Alloc::value_type _Alloc_value_type;
|
||||||
|
__glibcxx_class_requires(_Tp, _SGIAssignableConcept)
|
||||||
|
__glibcxx_class_requires4(_Compare, bool, _Key, _Key,
|
||||||
|
_BinaryFunctionConcept)
|
||||||
|
__glibcxx_class_requires2(value_type, _Alloc_value_type, _SameTypeConcept)
|
||||||
|
|
||||||
|
public:
|
||||||
class value_compare
|
class value_compare
|
||||||
: public std::binary_function<value_type, value_type, bool>
|
: public std::binary_function<value_type, value_type, bool>
|
||||||
{
|
{
|
||||||
|
@ -118,19 +123,22 @@ namespace _GLIBCXX_STD
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// @if maint This turns a red-black tree into a [multi]map. @endif
|
/// @if maint This turns a red-black tree into a [multi]map. @endif
|
||||||
typedef _Rb_tree<key_type, value_type,
|
typedef typename _Alloc::template rebind<value_type>::other
|
||||||
_Select1st<value_type>, key_compare, _Alloc> _Rep_type;
|
_Pair_alloc_type;
|
||||||
|
|
||||||
|
typedef _Rb_tree<key_type, value_type, _Select1st<value_type>,
|
||||||
|
key_compare, _Pair_alloc_type> _Rep_type;
|
||||||
|
|
||||||
/// @if maint The actual tree structure. @endif
|
/// @if maint The actual tree structure. @endif
|
||||||
_Rep_type _M_t;
|
_Rep_type _M_t;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// many of these are specified differently in ISO, but the following are
|
// many of these are specified differently in ISO, but the following are
|
||||||
// "functionally equivalent"
|
// "functionally equivalent"
|
||||||
typedef typename _Alloc::pointer pointer;
|
typedef typename _Pair_alloc_type::pointer pointer;
|
||||||
typedef typename _Alloc::const_pointer const_pointer;
|
typedef typename _Pair_alloc_type::const_pointer const_pointer;
|
||||||
typedef typename _Alloc::reference reference;
|
typedef typename _Pair_alloc_type::reference reference;
|
||||||
typedef typename _Alloc::const_reference const_reference;
|
typedef typename _Pair_alloc_type::const_reference const_reference;
|
||||||
typedef typename _Rep_type::allocator_type allocator_type;
|
|
||||||
typedef typename _Rep_type::iterator iterator;
|
typedef typename _Rep_type::iterator iterator;
|
||||||
typedef typename _Rep_type::const_iterator const_iterator;
|
typedef typename _Rep_type::const_iterator const_iterator;
|
||||||
typedef typename _Rep_type::size_type size_type;
|
typedef typename _Rep_type::size_type size_type;
|
||||||
|
@ -687,7 +695,8 @@ namespace _GLIBCXX_STD
|
||||||
/// See std::map::swap().
|
/// See std::map::swap().
|
||||||
template <typename _Key, typename _Tp, typename _Compare, typename _Alloc>
|
template <typename _Key, typename _Tp, typename _Compare, typename _Alloc>
|
||||||
inline void
|
inline void
|
||||||
swap(map<_Key,_Tp,_Compare,_Alloc>& __x, map<_Key,_Tp,_Compare,_Alloc>& __y)
|
swap(map<_Key, _Tp, _Compare, _Alloc>& __x,
|
||||||
|
map<_Key, _Tp, _Compare, _Alloc>& __y)
|
||||||
{ __x.swap(__y); }
|
{ __x.swap(__y); }
|
||||||
} // namespace std
|
} // namespace std
|
||||||
|
|
||||||
|
|
|
@ -106,17 +106,22 @@ namespace _GLIBCXX_STD
|
||||||
template <typename _Key, typename _Tp, typename _Compare, typename _Alloc>
|
template <typename _Key, typename _Tp, typename _Compare, typename _Alloc>
|
||||||
class multimap
|
class multimap
|
||||||
{
|
{
|
||||||
// concept requirements
|
|
||||||
__glibcxx_class_requires(_Tp, _SGIAssignableConcept)
|
|
||||||
__glibcxx_class_requires4(_Compare, bool, _Key, _Key,
|
|
||||||
_BinaryFunctionConcept)
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef _Key key_type;
|
typedef _Key key_type;
|
||||||
typedef _Tp mapped_type;
|
typedef _Tp mapped_type;
|
||||||
typedef std::pair<const _Key, _Tp> value_type;
|
typedef std::pair<const _Key, _Tp> value_type;
|
||||||
typedef _Compare key_compare;
|
typedef _Compare key_compare;
|
||||||
|
typedef _Alloc allocator_type;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// concept requirements
|
||||||
|
typedef typename _Alloc::value_type _Alloc_value_type;
|
||||||
|
__glibcxx_class_requires(_Tp, _SGIAssignableConcept)
|
||||||
|
__glibcxx_class_requires4(_Compare, bool, _Key, _Key,
|
||||||
|
_BinaryFunctionConcept)
|
||||||
|
__glibcxx_class_requires2(value_type, _Alloc_value_type, _SameTypeConcept)
|
||||||
|
|
||||||
|
public:
|
||||||
class value_compare
|
class value_compare
|
||||||
: public std::binary_function<value_type, value_type, bool>
|
: public std::binary_function<value_type, value_type, bool>
|
||||||
{
|
{
|
||||||
|
@ -134,19 +139,21 @@ namespace _GLIBCXX_STD
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// @if maint This turns a red-black tree into a [multi]map. @endif
|
/// @if maint This turns a red-black tree into a [multi]map. @endif
|
||||||
typedef _Rb_tree<key_type, value_type,
|
typedef typename _Alloc::template rebind<value_type>::other
|
||||||
_Select1st<value_type>, key_compare, _Alloc> _Rep_type;
|
_Pair_alloc_type;
|
||||||
|
|
||||||
|
typedef _Rb_tree<key_type, value_type, _Select1st<value_type>,
|
||||||
|
key_compare, _Pair_alloc_type> _Rep_type;
|
||||||
/// @if maint The actual tree structure. @endif
|
/// @if maint The actual tree structure. @endif
|
||||||
_Rep_type _M_t;
|
_Rep_type _M_t;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// many of these are specified differently in ISO, but the following are
|
// many of these are specified differently in ISO, but the following are
|
||||||
// "functionally equivalent"
|
// "functionally equivalent"
|
||||||
typedef typename _Alloc::pointer pointer;
|
typedef typename _Pair_alloc_type::pointer pointer;
|
||||||
typedef typename _Alloc::const_pointer const_pointer;
|
typedef typename _Pair_alloc_type::const_pointer const_pointer;
|
||||||
typedef typename _Alloc::reference reference;
|
typedef typename _Pair_alloc_type::reference reference;
|
||||||
typedef typename _Alloc::const_reference const_reference;
|
typedef typename _Pair_alloc_type::const_reference const_reference;
|
||||||
typedef typename _Rep_type::allocator_type allocator_type;
|
|
||||||
typedef typename _Rep_type::iterator iterator;
|
typedef typename _Rep_type::iterator iterator;
|
||||||
typedef typename _Rep_type::const_iterator const_iterator;
|
typedef typename _Rep_type::const_iterator const_iterator;
|
||||||
typedef typename _Rep_type::size_type size_type;
|
typedef typename _Rep_type::size_type size_type;
|
||||||
|
|
|
@ -105,9 +105,11 @@ namespace _GLIBCXX_STD
|
||||||
class multiset
|
class multiset
|
||||||
{
|
{
|
||||||
// concept requirements
|
// concept requirements
|
||||||
|
typedef typename _Alloc::value_type _Alloc_value_type;
|
||||||
__glibcxx_class_requires(_Key, _SGIAssignableConcept)
|
__glibcxx_class_requires(_Key, _SGIAssignableConcept)
|
||||||
__glibcxx_class_requires4(_Compare, bool, _Key, _Key,
|
__glibcxx_class_requires4(_Compare, bool, _Key, _Key,
|
||||||
_BinaryFunctionConcept)
|
_BinaryFunctionConcept)
|
||||||
|
__glibcxx_class_requires2(_Key, _Alloc_value_type, _SameTypeConcept)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// typedefs:
|
// typedefs:
|
||||||
|
@ -115,19 +117,22 @@ namespace _GLIBCXX_STD
|
||||||
typedef _Key value_type;
|
typedef _Key value_type;
|
||||||
typedef _Compare key_compare;
|
typedef _Compare key_compare;
|
||||||
typedef _Compare value_compare;
|
typedef _Compare value_compare;
|
||||||
|
typedef _Alloc allocator_type;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// @if maint This turns a red-black tree into a [multi]set. @endif
|
/// @if maint This turns a red-black tree into a [multi]set. @endif
|
||||||
typedef _Rb_tree<key_type, value_type,
|
typedef typename _Alloc::template rebind<_Key>::other _Key_alloc_type;
|
||||||
_Identity<value_type>, key_compare, _Alloc> _Rep_type;
|
|
||||||
|
typedef _Rb_tree<key_type, value_type, _Identity<value_type>,
|
||||||
|
key_compare, _Key_alloc_type> _Rep_type;
|
||||||
/// @if maint The actual tree structure. @endif
|
/// @if maint The actual tree structure. @endif
|
||||||
_Rep_type _M_t;
|
_Rep_type _M_t;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef typename _Alloc::pointer pointer;
|
typedef typename _Key_alloc_type::pointer pointer;
|
||||||
typedef typename _Alloc::const_pointer const_pointer;
|
typedef typename _Key_alloc_type::const_pointer const_pointer;
|
||||||
typedef typename _Alloc::reference reference;
|
typedef typename _Key_alloc_type::reference reference;
|
||||||
typedef typename _Alloc::const_reference const_reference;
|
typedef typename _Key_alloc_type::const_reference const_reference;
|
||||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||||
// DR 103. set::iterator is required to be modifiable,
|
// DR 103. set::iterator is required to be modifiable,
|
||||||
// but this allows modification of keys.
|
// but this allows modification of keys.
|
||||||
|
@ -137,7 +142,6 @@ namespace _GLIBCXX_STD
|
||||||
typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
|
typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
|
||||||
typedef typename _Rep_type::size_type size_type;
|
typedef typename _Rep_type::size_type size_type;
|
||||||
typedef typename _Rep_type::difference_type difference_type;
|
typedef typename _Rep_type::difference_type difference_type;
|
||||||
typedef typename _Rep_type::allocator_type allocator_type;
|
|
||||||
|
|
||||||
// allocation/deallocation
|
// allocation/deallocation
|
||||||
|
|
||||||
|
|
|
@ -107,9 +107,11 @@ namespace _GLIBCXX_STD
|
||||||
class set
|
class set
|
||||||
{
|
{
|
||||||
// concept requirements
|
// concept requirements
|
||||||
|
typedef typename _Alloc::value_type _Alloc_value_type;
|
||||||
__glibcxx_class_requires(_Key, _SGIAssignableConcept)
|
__glibcxx_class_requires(_Key, _SGIAssignableConcept)
|
||||||
__glibcxx_class_requires4(_Compare, bool, _Key, _Key,
|
__glibcxx_class_requires4(_Compare, bool, _Key, _Key,
|
||||||
_BinaryFunctionConcept)
|
_BinaryFunctionConcept)
|
||||||
|
__glibcxx_class_requires2(_Key, _Alloc_value_type, _SameTypeConcept)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// typedefs:
|
// typedefs:
|
||||||
|
@ -119,19 +121,23 @@ namespace _GLIBCXX_STD
|
||||||
typedef _Key value_type;
|
typedef _Key value_type;
|
||||||
typedef _Compare key_compare;
|
typedef _Compare key_compare;
|
||||||
typedef _Compare value_compare;
|
typedef _Compare value_compare;
|
||||||
|
typedef _Alloc allocator_type;
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef _Rb_tree<key_type, value_type,
|
typedef typename _Alloc::template rebind<_Key>::other _Key_alloc_type;
|
||||||
_Identity<value_type>, key_compare, _Alloc> _Rep_type;
|
|
||||||
|
typedef _Rb_tree<key_type, value_type, _Identity<value_type>,
|
||||||
|
key_compare, _Key_alloc_type> _Rep_type;
|
||||||
_Rep_type _M_t; // red-black tree representing set
|
_Rep_type _M_t; // red-black tree representing set
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//@{
|
//@{
|
||||||
/// Iterator-related typedefs.
|
/// Iterator-related typedefs.
|
||||||
typedef typename _Alloc::pointer pointer;
|
typedef typename _Key_alloc_type::pointer pointer;
|
||||||
typedef typename _Alloc::const_pointer const_pointer;
|
typedef typename _Key_alloc_type::const_pointer const_pointer;
|
||||||
typedef typename _Alloc::reference reference;
|
typedef typename _Key_alloc_type::reference reference;
|
||||||
typedef typename _Alloc::const_reference const_reference;
|
typedef typename _Key_alloc_type::const_reference const_reference;
|
||||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||||
// DR 103. set::iterator is required to be modifiable,
|
// DR 103. set::iterator is required to be modifiable,
|
||||||
// but this allows modification of keys.
|
// but this allows modification of keys.
|
||||||
|
@ -141,7 +147,6 @@ namespace _GLIBCXX_STD
|
||||||
typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
|
typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
|
||||||
typedef typename _Rep_type::size_type size_type;
|
typedef typename _Rep_type::size_type size_type;
|
||||||
typedef typename _Rep_type::difference_type difference_type;
|
typedef typename _Rep_type::difference_type difference_type;
|
||||||
typedef typename _Rep_type::allocator_type allocator_type;
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
// allocation/deallocation
|
// allocation/deallocation
|
||||||
|
@ -155,7 +160,8 @@ namespace _GLIBCXX_STD
|
||||||
* @param comp Comparator to use.
|
* @param comp Comparator to use.
|
||||||
* @param a Allocator to use.
|
* @param a Allocator to use.
|
||||||
*/
|
*/
|
||||||
explicit set(const _Compare& __comp,
|
explicit
|
||||||
|
set(const _Compare& __comp,
|
||||||
const allocator_type& __a = allocator_type())
|
const allocator_type& __a = allocator_type())
|
||||||
: _M_t(__comp, __a) {}
|
: _M_t(__comp, __a) {}
|
||||||
|
|
||||||
|
|
|
@ -75,23 +75,29 @@ namespace _GLIBCXX_STD
|
||||||
template<typename _Tp, typename _Alloc>
|
template<typename _Tp, typename _Alloc>
|
||||||
struct _Vector_base
|
struct _Vector_base
|
||||||
{
|
{
|
||||||
|
typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type;
|
||||||
|
|
||||||
struct _Vector_impl
|
struct _Vector_impl
|
||||||
: public _Alloc
|
: public _Tp_alloc_type
|
||||||
{
|
{
|
||||||
_Tp* _M_start;
|
_Tp* _M_start;
|
||||||
_Tp* _M_finish;
|
_Tp* _M_finish;
|
||||||
_Tp* _M_end_of_storage;
|
_Tp* _M_end_of_storage;
|
||||||
_Vector_impl(_Alloc const& __a)
|
_Vector_impl(_Tp_alloc_type const& __a)
|
||||||
: _Alloc(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0)
|
: _Tp_alloc_type(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0)
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef _Alloc allocator_type;
|
typedef _Alloc allocator_type;
|
||||||
|
|
||||||
|
_Tp_alloc_type
|
||||||
|
_M_get_Tp_allocator() const
|
||||||
|
{ return *static_cast<const _Tp_alloc_type*>(&this->_M_impl); }
|
||||||
|
|
||||||
allocator_type
|
allocator_type
|
||||||
get_allocator() const
|
get_allocator() const
|
||||||
{ return *static_cast<const _Alloc*>(&this->_M_impl); }
|
{ return _M_get_Tp_allocator(); }
|
||||||
|
|
||||||
_Vector_base(const allocator_type& __a)
|
_Vector_base(const allocator_type& __a)
|
||||||
: _M_impl(__a)
|
: _M_impl(__a)
|
||||||
|
@ -148,17 +154,20 @@ namespace _GLIBCXX_STD
|
||||||
class vector : protected _Vector_base<_Tp, _Alloc>
|
class vector : protected _Vector_base<_Tp, _Alloc>
|
||||||
{
|
{
|
||||||
// Concept requirements.
|
// Concept requirements.
|
||||||
|
typedef typename _Alloc::value_type _Alloc_value_type;
|
||||||
__glibcxx_class_requires(_Tp, _SGIAssignableConcept)
|
__glibcxx_class_requires(_Tp, _SGIAssignableConcept)
|
||||||
|
__glibcxx_class_requires2(_Tp, _Alloc_value_type, _SameTypeConcept)
|
||||||
|
|
||||||
typedef _Vector_base<_Tp, _Alloc> _Base;
|
typedef _Vector_base<_Tp, _Alloc> _Base;
|
||||||
typedef vector<_Tp, _Alloc> vector_type;
|
typedef vector<_Tp, _Alloc> vector_type;
|
||||||
|
typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef _Tp value_type;
|
typedef _Tp value_type;
|
||||||
typedef typename _Alloc::pointer pointer;
|
typedef typename _Tp_alloc_type::pointer pointer;
|
||||||
typedef typename _Alloc::const_pointer const_pointer;
|
typedef typename _Tp_alloc_type::const_pointer const_pointer;
|
||||||
typedef typename _Alloc::reference reference;
|
typedef typename _Tp_alloc_type::reference reference;
|
||||||
typedef typename _Alloc::const_reference const_reference;
|
typedef typename _Tp_alloc_type::const_reference const_reference;
|
||||||
typedef __gnu_cxx::__normal_iterator<pointer, vector_type> iterator;
|
typedef __gnu_cxx::__normal_iterator<pointer, vector_type> iterator;
|
||||||
typedef __gnu_cxx::__normal_iterator<const_pointer, vector_type>
|
typedef __gnu_cxx::__normal_iterator<const_pointer, vector_type>
|
||||||
const_iterator;
|
const_iterator;
|
||||||
|
@ -166,7 +175,7 @@ namespace _GLIBCXX_STD
|
||||||
typedef std::reverse_iterator<iterator> reverse_iterator;
|
typedef std::reverse_iterator<iterator> reverse_iterator;
|
||||||
typedef size_t size_type;
|
typedef size_t size_type;
|
||||||
typedef ptrdiff_t difference_type;
|
typedef ptrdiff_t difference_type;
|
||||||
typedef typename _Base::allocator_type allocator_type;
|
typedef _Alloc allocator_type;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** @if maint
|
/** @if maint
|
||||||
|
@ -177,6 +186,7 @@ namespace _GLIBCXX_STD
|
||||||
using _Base::_M_allocate;
|
using _Base::_M_allocate;
|
||||||
using _Base::_M_deallocate;
|
using _Base::_M_deallocate;
|
||||||
using _Base::_M_impl;
|
using _Base::_M_impl;
|
||||||
|
using _Base::_M_get_Tp_allocator;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// [23.2.4.1] construct/copy/destroy
|
// [23.2.4.1] construct/copy/destroy
|
||||||
|
@ -201,7 +211,7 @@ namespace _GLIBCXX_STD
|
||||||
: _Base(__n, __a)
|
: _Base(__n, __a)
|
||||||
{
|
{
|
||||||
std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
|
std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish = this->_M_impl._M_start + __n;
|
this->_M_impl._M_finish = this->_M_impl._M_start + __n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,7 +227,7 @@ namespace _GLIBCXX_STD
|
||||||
: _Base(__n, allocator_type())
|
: _Base(__n, allocator_type())
|
||||||
{
|
{
|
||||||
std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, value_type(),
|
std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, value_type(),
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish = this->_M_impl._M_start + __n;
|
this->_M_impl._M_finish = this->_M_impl._M_start + __n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,7 +245,7 @@ namespace _GLIBCXX_STD
|
||||||
{ this->_M_impl._M_finish =
|
{ this->_M_impl._M_finish =
|
||||||
std::__uninitialized_copy_a(__x.begin(), __x.end(),
|
std::__uninitialized_copy_a(__x.begin(), __x.end(),
|
||||||
this->_M_impl._M_start,
|
this->_M_impl._M_start,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -271,7 +281,7 @@ namespace _GLIBCXX_STD
|
||||||
*/
|
*/
|
||||||
~vector()
|
~vector()
|
||||||
{ std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
{ std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -764,7 +774,7 @@ namespace _GLIBCXX_STD
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
std::__uninitialized_copy_a(__first, __last, __result,
|
std::__uninitialized_copy_a(__first, __last, __result,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
return __result;
|
return __result;
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
|
@ -785,7 +795,7 @@ namespace _GLIBCXX_STD
|
||||||
this->_M_impl._M_start = _M_allocate(__n);
|
this->_M_impl._M_start = _M_allocate(__n);
|
||||||
this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
|
this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
|
||||||
std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
|
std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish = this->_M_impl._M_end_of_storage;
|
this->_M_impl._M_finish = this->_M_impl._M_end_of_storage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -822,7 +832,7 @@ namespace _GLIBCXX_STD
|
||||||
this->_M_impl._M_finish =
|
this->_M_impl._M_finish =
|
||||||
std::__uninitialized_copy_a(__first, __last,
|
std::__uninitialized_copy_a(__first, __last,
|
||||||
this->_M_impl._M_start,
|
this->_M_impl._M_start,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ namespace _GLIBCXX_STD
|
||||||
this->_M_impl._M_start,
|
this->_M_impl._M_start,
|
||||||
this->_M_impl._M_finish);
|
this->_M_impl._M_finish);
|
||||||
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
_M_deallocate(this->_M_impl._M_start,
|
_M_deallocate(this->_M_impl._M_start,
|
||||||
this->_M_impl._M_end_of_storage
|
this->_M_impl._M_end_of_storage
|
||||||
- this->_M_impl._M_start);
|
- this->_M_impl._M_start);
|
||||||
|
@ -122,7 +122,7 @@ namespace _GLIBCXX_STD
|
||||||
erase(iterator __first, iterator __last)
|
erase(iterator __first, iterator __last)
|
||||||
{
|
{
|
||||||
iterator __i(std::copy(__last, end(), __first));
|
iterator __i(std::copy(__last, end(), __first));
|
||||||
std::_Destroy(__i, end(), this->get_allocator());
|
std::_Destroy(__i, end(), _M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish = this->_M_impl._M_finish - (__last - __first);
|
this->_M_impl._M_finish = this->_M_impl._M_finish - (__last - __first);
|
||||||
return __first;
|
return __first;
|
||||||
}
|
}
|
||||||
|
@ -140,7 +140,7 @@ namespace _GLIBCXX_STD
|
||||||
pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(),
|
pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(),
|
||||||
__x.end());
|
__x.end());
|
||||||
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
_M_deallocate(this->_M_impl._M_start,
|
_M_deallocate(this->_M_impl._M_start,
|
||||||
this->_M_impl._M_end_of_storage
|
this->_M_impl._M_end_of_storage
|
||||||
- this->_M_impl._M_start);
|
- this->_M_impl._M_start);
|
||||||
|
@ -150,7 +150,7 @@ namespace _GLIBCXX_STD
|
||||||
else if (size() >= __xlen)
|
else if (size() >= __xlen)
|
||||||
{
|
{
|
||||||
iterator __i(std::copy(__x.begin(), __x.end(), begin()));
|
iterator __i(std::copy(__x.begin(), __x.end(), begin()));
|
||||||
std::_Destroy(__i, end(), this->get_allocator());
|
std::_Destroy(__i, end(), _M_get_Tp_allocator());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -158,7 +158,7 @@ namespace _GLIBCXX_STD
|
||||||
this->_M_impl._M_start);
|
this->_M_impl._M_start);
|
||||||
std::__uninitialized_copy_a(__x.begin() + size(),
|
std::__uninitialized_copy_a(__x.begin() + size(),
|
||||||
__x.end(), this->_M_impl._M_finish,
|
__x.end(), this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
}
|
}
|
||||||
this->_M_impl._M_finish = this->_M_impl._M_start + __xlen;
|
this->_M_impl._M_finish = this->_M_impl._M_start + __xlen;
|
||||||
}
|
}
|
||||||
|
@ -172,7 +172,7 @@ namespace _GLIBCXX_STD
|
||||||
{
|
{
|
||||||
if (__n > capacity())
|
if (__n > capacity())
|
||||||
{
|
{
|
||||||
vector __tmp(__n, __val, get_allocator());
|
vector __tmp(__n, __val, _M_get_Tp_allocator());
|
||||||
__tmp.swap(*this);
|
__tmp.swap(*this);
|
||||||
}
|
}
|
||||||
else if (__n > size())
|
else if (__n > size())
|
||||||
|
@ -180,7 +180,7 @@ namespace _GLIBCXX_STD
|
||||||
std::fill(begin(), end(), __val);
|
std::fill(begin(), end(), __val);
|
||||||
std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
|
std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
|
||||||
__n - size(), __val,
|
__n - size(), __val,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish += __n - size();
|
this->_M_impl._M_finish += __n - size();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -216,7 +216,7 @@ namespace _GLIBCXX_STD
|
||||||
{
|
{
|
||||||
pointer __tmp(_M_allocate_and_copy(__len, __first, __last));
|
pointer __tmp(_M_allocate_and_copy(__len, __first, __last));
|
||||||
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
_M_deallocate(this->_M_impl._M_start,
|
_M_deallocate(this->_M_impl._M_start,
|
||||||
this->_M_impl._M_end_of_storage
|
this->_M_impl._M_end_of_storage
|
||||||
- this->_M_impl._M_start);
|
- this->_M_impl._M_start);
|
||||||
|
@ -228,7 +228,7 @@ namespace _GLIBCXX_STD
|
||||||
{
|
{
|
||||||
iterator __new_finish(std::copy(__first, __last,
|
iterator __new_finish(std::copy(__first, __last,
|
||||||
this->_M_impl._M_start));
|
this->_M_impl._M_start));
|
||||||
std::_Destroy(__new_finish, end(), this->get_allocator());
|
std::_Destroy(__new_finish, end(), _M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish = __new_finish.base();
|
this->_M_impl._M_finish = __new_finish.base();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -239,7 +239,7 @@ namespace _GLIBCXX_STD
|
||||||
this->_M_impl._M_finish =
|
this->_M_impl._M_finish =
|
||||||
std::__uninitialized_copy_a(__mid, __last,
|
std::__uninitialized_copy_a(__mid, __last,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,22 +280,22 @@ namespace _GLIBCXX_STD
|
||||||
std::__uninitialized_copy_a(iterator(this->_M_impl._M_start),
|
std::__uninitialized_copy_a(iterator(this->_M_impl._M_start),
|
||||||
__position,
|
__position,
|
||||||
__new_start,
|
__new_start,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl.construct(__new_finish.base(), __x);
|
this->_M_impl.construct(__new_finish.base(), __x);
|
||||||
++__new_finish;
|
++__new_finish;
|
||||||
__new_finish =
|
__new_finish =
|
||||||
std::__uninitialized_copy_a(__position,
|
std::__uninitialized_copy_a(__position,
|
||||||
iterator(this->_M_impl._M_finish),
|
iterator(this->_M_impl._M_finish),
|
||||||
__new_finish,
|
__new_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
std::_Destroy(__new_start, __new_finish, this->get_allocator());
|
std::_Destroy(__new_start, __new_finish, _M_get_Tp_allocator());
|
||||||
_M_deallocate(__new_start.base(),__len);
|
_M_deallocate(__new_start.base(),__len);
|
||||||
__throw_exception_again;
|
__throw_exception_again;
|
||||||
}
|
}
|
||||||
std::_Destroy(begin(), end(), this->get_allocator());
|
std::_Destroy(begin(), end(), _M_get_Tp_allocator());
|
||||||
_M_deallocate(this->_M_impl._M_start,
|
_M_deallocate(this->_M_impl._M_start,
|
||||||
this->_M_impl._M_end_of_storage
|
this->_M_impl._M_end_of_storage
|
||||||
- this->_M_impl._M_start);
|
- this->_M_impl._M_start);
|
||||||
|
@ -323,7 +323,7 @@ namespace _GLIBCXX_STD
|
||||||
std::__uninitialized_copy_a(this->_M_impl._M_finish - __n,
|
std::__uninitialized_copy_a(this->_M_impl._M_finish - __n,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish += __n;
|
this->_M_impl._M_finish += __n;
|
||||||
std::copy_backward(__position, __old_finish - __n,
|
std::copy_backward(__position, __old_finish - __n,
|
||||||
__old_finish);
|
__old_finish);
|
||||||
|
@ -334,11 +334,11 @@ namespace _GLIBCXX_STD
|
||||||
std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
|
std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
|
||||||
__n - __elems_after,
|
__n - __elems_after,
|
||||||
__x_copy,
|
__x_copy,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish += __n - __elems_after;
|
this->_M_impl._M_finish += __n - __elems_after;
|
||||||
std::__uninitialized_copy_a(__position, __old_finish,
|
std::__uninitialized_copy_a(__position, __old_finish,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish += __elems_after;
|
this->_M_impl._M_finish += __elems_after;
|
||||||
std::fill(__position, __old_finish, __x_copy);
|
std::fill(__position, __old_finish, __x_copy);
|
||||||
}
|
}
|
||||||
|
@ -361,23 +361,23 @@ namespace _GLIBCXX_STD
|
||||||
__new_finish =
|
__new_finish =
|
||||||
std::__uninitialized_copy_a(begin(), __position,
|
std::__uninitialized_copy_a(begin(), __position,
|
||||||
__new_start,
|
__new_start,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
std::__uninitialized_fill_n_a(__new_finish, __n, __x,
|
std::__uninitialized_fill_n_a(__new_finish, __n, __x,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
__new_finish += __n;
|
__new_finish += __n;
|
||||||
__new_finish =
|
__new_finish =
|
||||||
std::__uninitialized_copy_a(__position, end(), __new_finish,
|
std::__uninitialized_copy_a(__position, end(), __new_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
std::_Destroy(__new_start, __new_finish,
|
std::_Destroy(__new_start, __new_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
_M_deallocate(__new_start.base(), __len);
|
_M_deallocate(__new_start.base(), __len);
|
||||||
__throw_exception_again;
|
__throw_exception_again;
|
||||||
}
|
}
|
||||||
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
_M_deallocate(this->_M_impl._M_start,
|
_M_deallocate(this->_M_impl._M_start,
|
||||||
this->_M_impl._M_end_of_storage
|
this->_M_impl._M_end_of_storage
|
||||||
- this->_M_impl._M_start);
|
- this->_M_impl._M_start);
|
||||||
|
@ -421,7 +421,7 @@ namespace _GLIBCXX_STD
|
||||||
std::__uninitialized_copy_a(this->_M_impl._M_finish - __n,
|
std::__uninitialized_copy_a(this->_M_impl._M_finish - __n,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish += __n;
|
this->_M_impl._M_finish += __n;
|
||||||
std::copy_backward(__position, __old_finish - __n,
|
std::copy_backward(__position, __old_finish - __n,
|
||||||
__old_finish);
|
__old_finish);
|
||||||
|
@ -433,11 +433,11 @@ namespace _GLIBCXX_STD
|
||||||
std::advance(__mid, __elems_after);
|
std::advance(__mid, __elems_after);
|
||||||
std::__uninitialized_copy_a(__mid, __last,
|
std::__uninitialized_copy_a(__mid, __last,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish += __n - __elems_after;
|
this->_M_impl._M_finish += __n - __elems_after;
|
||||||
std::__uninitialized_copy_a(__position, __old_finish,
|
std::__uninitialized_copy_a(__position, __old_finish,
|
||||||
this->_M_impl._M_finish,
|
this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
this->_M_impl._M_finish += __elems_after;
|
this->_M_impl._M_finish += __elems_after;
|
||||||
std::copy(__first, __mid, __position);
|
std::copy(__first, __mid, __position);
|
||||||
}
|
}
|
||||||
|
@ -461,25 +461,25 @@ namespace _GLIBCXX_STD
|
||||||
std::__uninitialized_copy_a(iterator(this->_M_impl._M_start),
|
std::__uninitialized_copy_a(iterator(this->_M_impl._M_start),
|
||||||
__position,
|
__position,
|
||||||
__new_start,
|
__new_start,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
__new_finish =
|
__new_finish =
|
||||||
std::__uninitialized_copy_a(__first, __last, __new_finish,
|
std::__uninitialized_copy_a(__first, __last, __new_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
__new_finish =
|
__new_finish =
|
||||||
std::__uninitialized_copy_a(__position,
|
std::__uninitialized_copy_a(__position,
|
||||||
iterator(this->_M_impl._M_finish),
|
iterator(this->_M_impl._M_finish),
|
||||||
__new_finish,
|
__new_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
std::_Destroy(__new_start,__new_finish,
|
std::_Destroy(__new_start,__new_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
_M_deallocate(__new_start.base(), __len);
|
_M_deallocate(__new_start.base(), __len);
|
||||||
__throw_exception_again;
|
__throw_exception_again;
|
||||||
}
|
}
|
||||||
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
||||||
this->get_allocator());
|
_M_get_Tp_allocator());
|
||||||
_M_deallocate(this->_M_impl._M_start,
|
_M_deallocate(this->_M_impl._M_start,
|
||||||
this->_M_impl._M_end_of_storage
|
this->_M_impl._M_end_of_storage
|
||||||
- this->_M_impl._M_start);
|
- this->_M_impl._M_start);
|
||||||
|
|
36
libstdc++-v3/testsuite/21_strings/basic_string/1.cc
Normal file
36
libstdc++-v3/testsuite/21_strings/basic_string/1.cc
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
// Copyright (C) 2005 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 2, 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 COPYING. If not, write to the Free
|
||||||
|
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
// USA.
|
||||||
|
|
||||||
|
// As a special exception, you may use this file as part of a free software
|
||||||
|
// library without restriction. Specifically, if other files instantiate
|
||||||
|
// templates or use macros or inline functions from this file, or you compile
|
||||||
|
// this file and link it with other files to produce an executable, this
|
||||||
|
// file does not by itself cause the resulting executable to be covered by
|
||||||
|
// the GNU General Public License. This exception does not however
|
||||||
|
// invalidate any other reasons why the executable file might be covered by
|
||||||
|
// the GNU General Public License.
|
||||||
|
|
||||||
|
// This file tests explicit instantiation of basic_string
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
// libstdc++/21770
|
||||||
|
template class std::basic_string<int, std::char_traits<int>,
|
||||||
|
std::allocator<char> >;
|
|
@ -0,0 +1,35 @@
|
||||||
|
// Copyright (C) 2005 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 2, 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 COPYING. If not, write to the Free
|
||||||
|
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
// USA.
|
||||||
|
|
||||||
|
// As a special exception, you may use this file as part of a free software
|
||||||
|
// library without restriction. Specifically, if other files instantiate
|
||||||
|
// templates or use macros or inline functions from this file, or you compile
|
||||||
|
// this file and link it with other files to produce an executable, this
|
||||||
|
// file does not by itself cause the resulting executable to be covered by
|
||||||
|
// the GNU General Public License. This exception does not however
|
||||||
|
// invalidate any other reasons why the executable file might be covered by
|
||||||
|
// the GNU General Public License.
|
||||||
|
|
||||||
|
// This file tests explicit instantiation of library containers
|
||||||
|
|
||||||
|
#include <deque>
|
||||||
|
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
// libstdc++/21770
|
||||||
|
template class std::deque<int, std::allocator<char> >;
|
|
@ -0,0 +1,35 @@
|
||||||
|
// Copyright (C) 2005 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 2, 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 COPYING. If not, write to the Free
|
||||||
|
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
// USA.
|
||||||
|
|
||||||
|
// As a special exception, you may use this file as part of a free software
|
||||||
|
// library without restriction. Specifically, if other files instantiate
|
||||||
|
// templates or use macros or inline functions from this file, or you compile
|
||||||
|
// this file and link it with other files to produce an executable, this
|
||||||
|
// file does not by itself cause the resulting executable to be covered by
|
||||||
|
// the GNU General Public License. This exception does not however
|
||||||
|
// invalidate any other reasons why the executable file might be covered by
|
||||||
|
// the GNU General Public License.
|
||||||
|
|
||||||
|
// This file tests explicit instantiation of library containers
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
// libstdc++/21770
|
||||||
|
template class std::list<int, std::allocator<char> >;
|
|
@ -0,0 +1,35 @@
|
||||||
|
// Copyright (C) 2005 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 2, 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 COPYING. If not, write to the Free
|
||||||
|
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
// USA.
|
||||||
|
|
||||||
|
// As a special exception, you may use this file as part of a free software
|
||||||
|
// library without restriction. Specifically, if other files instantiate
|
||||||
|
// templates or use macros or inline functions from this file, or you compile
|
||||||
|
// this file and link it with other files to produce an executable, this
|
||||||
|
// file does not by itself cause the resulting executable to be covered by
|
||||||
|
// the GNU General Public License. This exception does not however
|
||||||
|
// invalidate any other reasons why the executable file might be covered by
|
||||||
|
// the GNU General Public License.
|
||||||
|
|
||||||
|
// This file tests explicit instantiation of library containers
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
// libstdc++/21770
|
||||||
|
template class std::map<int, double, std::less<int>, std::allocator<char> >;
|
|
@ -0,0 +1,35 @@
|
||||||
|
// Copyright (C) 2005 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 2, 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 COPYING. If not, write to the Free
|
||||||
|
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
// USA.
|
||||||
|
|
||||||
|
// As a special exception, you may use this file as part of a free software
|
||||||
|
// library without restriction. Specifically, if other files instantiate
|
||||||
|
// templates or use macros or inline functions from this file, or you compile
|
||||||
|
// this file and link it with other files to produce an executable, this
|
||||||
|
// file does not by itself cause the resulting executable to be covered by
|
||||||
|
// the GNU General Public License. This exception does not however
|
||||||
|
// invalidate any other reasons why the executable file might be covered by
|
||||||
|
// the GNU General Public License.
|
||||||
|
|
||||||
|
// This file tests explicit instantiation of library containers
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
// libstdc++/21770
|
||||||
|
template class std::multimap<int, double, std::less<int>, std::allocator<char> >;
|
|
@ -0,0 +1,35 @@
|
||||||
|
// Copyright (C) 2005 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 2, 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 COPYING. If not, write to the Free
|
||||||
|
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
// USA.
|
||||||
|
|
||||||
|
// As a special exception, you may use this file as part of a free software
|
||||||
|
// library without restriction. Specifically, if other files instantiate
|
||||||
|
// templates or use macros or inline functions from this file, or you compile
|
||||||
|
// this file and link it with other files to produce an executable, this
|
||||||
|
// file does not by itself cause the resulting executable to be covered by
|
||||||
|
// the GNU General Public License. This exception does not however
|
||||||
|
// invalidate any other reasons why the executable file might be covered by
|
||||||
|
// the GNU General Public License.
|
||||||
|
|
||||||
|
// This file tests explicit instantiation of library containers
|
||||||
|
|
||||||
|
#include <set>
|
||||||
|
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
// libstdc++/21770
|
||||||
|
template class std::multiset<int, std::less<int>, std::allocator<char> >;
|
|
@ -0,0 +1,35 @@
|
||||||
|
// Copyright (C) 2005 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 2, 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 COPYING. If not, write to the Free
|
||||||
|
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
// USA.
|
||||||
|
|
||||||
|
// As a special exception, you may use this file as part of a free software
|
||||||
|
// library without restriction. Specifically, if other files instantiate
|
||||||
|
// templates or use macros or inline functions from this file, or you compile
|
||||||
|
// this file and link it with other files to produce an executable, this
|
||||||
|
// file does not by itself cause the resulting executable to be covered by
|
||||||
|
// the GNU General Public License. This exception does not however
|
||||||
|
// invalidate any other reasons why the executable file might be covered by
|
||||||
|
// the GNU General Public License.
|
||||||
|
|
||||||
|
// This file tests explicit instantiation of library containers
|
||||||
|
|
||||||
|
#include <set>
|
||||||
|
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
// libstdc++/21770
|
||||||
|
template class std::set<int, std::less<int>, std::allocator<char> >;
|
|
@ -0,0 +1,35 @@
|
||||||
|
// Copyright (C) 2005 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 2, 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 COPYING. If not, write to the Free
|
||||||
|
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
// USA.
|
||||||
|
|
||||||
|
// As a special exception, you may use this file as part of a free software
|
||||||
|
// library without restriction. Specifically, if other files instantiate
|
||||||
|
// templates or use macros or inline functions from this file, or you compile
|
||||||
|
// this file and link it with other files to produce an executable, this
|
||||||
|
// file does not by itself cause the resulting executable to be covered by
|
||||||
|
// the GNU General Public License. This exception does not however
|
||||||
|
// invalidate any other reasons why the executable file might be covered by
|
||||||
|
// the GNU General Public License.
|
||||||
|
|
||||||
|
// This file tests explicit instantiation of library containers
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
// libstdc++/21770
|
||||||
|
template class std::vector<int, std::allocator<char> >;
|
Loading…
Add table
Add a link
Reference in a new issue