public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/50118] New: node-based containers cannot use allocators with explicit constructor template
@ 2011-08-18 14:38 redi at gcc dot gnu.org
2011-08-18 15:03 ` [Bug libstdc++/50118] " paolo.carlini at oracle dot com
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: redi at gcc dot gnu.org @ 2011-08-18 14:38 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50118
Bug #: 50118
Summary: node-based containers cannot use allocators with
explicit constructor template
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Keywords: rejects-valid
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: redi@gcc.gnu.org
#include <memory>
#include <list>
#include <set>
#include <map>
template <class T>
struct Alloc : std::allocator<T>
{
Alloc() { }
template<class U>
explicit // N.B. explicit ******
Alloc(const Alloc<U>&) { }
template<class U>
struct rebind
{ typedef Alloc<U> other; };
};
Alloc<int> a;
std::list<int, Alloc<int> > l(a);
typedef std::less<int> Cmp;
Cmp cmp;
std::set<int, Cmp, Alloc<int> > s(cmp, a);
std::map<int, int, Cmp, Alloc<int> > m(cmp, a);
As far as I can tell there is no requirement in the standard that says Alloc<T>
must be implicitly convertible to Alloc<U>, so the node-based containers which
rebind allocators from Alloc<value_type> to Alloc<node_type> need to convert
explicitly
e.g. in stl_list.h
_List_base(const allocator_type& __a)
- : _M_impl(__a)
+ : _M_impl(_Node_alloc_type(__a))
{ _M_init(); }
Alternatively, _List_base::_List_impl could be constructible from the original
allocator_type and do the conversion there
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug libstdc++/50118] node-based containers cannot use allocators with explicit constructor template
2011-08-18 14:38 [Bug libstdc++/50118] New: node-based containers cannot use allocators with explicit constructor template redi at gcc dot gnu.org
@ 2011-08-18 15:03 ` paolo.carlini at oracle dot com
2011-08-29 13:43 ` paolo at gcc dot gnu.org
2011-08-29 13:44 ` paolo.carlini at oracle dot com
2 siblings, 0 replies; 4+ messages in thread
From: paolo.carlini at oracle dot com @ 2011-08-18 15:03 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50118
Paolo Carlini <paolo.carlini at oracle dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2011-08-18
AssignedTo|unassigned at gcc dot |paolo.carlini at oracle dot
|gnu.org |com
Target Milestone|--- |4.7.0
Ever Confirmed|0 |1
--- Comment #1 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-08-18 15:02:31 UTC ---
Ok.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug libstdc++/50118] node-based containers cannot use allocators with explicit constructor template
2011-08-18 14:38 [Bug libstdc++/50118] New: node-based containers cannot use allocators with explicit constructor template redi at gcc dot gnu.org
2011-08-18 15:03 ` [Bug libstdc++/50118] " paolo.carlini at oracle dot com
@ 2011-08-29 13:43 ` paolo at gcc dot gnu.org
2011-08-29 13:44 ` paolo.carlini at oracle dot com
2 siblings, 0 replies; 4+ messages in thread
From: paolo at gcc dot gnu.org @ 2011-08-29 13:43 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50118
--- Comment #2 from paolo at gcc dot gnu.org <paolo at gcc dot gnu.org> 2011-08-29 13:40:39 UTC ---
Author: paolo
Date: Mon Aug 29 13:40:33 2011
New Revision: 178230
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=178230
Log:
2011-08-29 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/50118
* include/bits/stl_list.h (_List_base<>::
_List_base(const allocator_type&)): Remove.
(_List_base<>::_List_base(const _Node_alloc_type&)): Add.
(list<>:list(const allocator_type&), list(size_type, const
value_type&, const allocator_type&),
list(initializer_list<, const allocator_type&),
list(_InputIterator, _InputIterator, const allocator_type&),
insert(iterator, size_type, const value_type&),
insert(iterator, _InputIterator, _InputIterator)): Adjust.
* include/bits/stl_tree.h (_Rb_tree<>::_Rb_tree(const _Compare&,
const allocator_type&)): Fix.
* include/bits/stl_map.h (map<>::map(const _Compare&,
const allocator_type&), map(initializer_list<>,
const _Compare&, const allocator_type&), map(_InputIterator,
_InputIterator, const _Compare&, const allocator_type&),
get_allocator): Adjust.
* include/bits/stl_set.h (set<>::set(const _Compare&,
const allocator_type&), set(initializer_list<>,
const _Compare&, const allocator_type&), set(_InputIterator,
_InputIterator, const _Compare&, const allocator_type&),
get_allocator): Likewise.
* include/bits/stl_multimap.h (multimap<>::multimap(const _Compare&,
const allocator_type&), multimap(initializer_list<>,
const _Compare&, const allocator_type&), multimap(_InputIterator,
_InputIterator, const _Compare&, const allocator_type&),
get_allocator): Likewise.
* include/bits/stl_multiset.h (multiset<>::multiset(const _Compare&,
const allocator_type&), multiset(initializer_list<>,
const _Compare&, const allocator_type&), multiset(_InputIterator,
_InputIterator, const _Compare&, const allocator_type&),
get_allocator): Likewise.
* include/bits/forward_list.h (_Fwd_list_base<>::
_Fwd_list_base(const _Alloc&), _Fwd_list_base(const _Fwd_list_base&,
const _Alloc&), _Fwd_list_base(_Fwd_list_base&&, const _Alloc&)):
Remove.
(_Fwd_list_base<>::_Fwd_list_base(const _Node_alloc_type&),
_Fwd_list_base(const _Fwd_list_base&,
const _Node_alloc_type&), _Fwd_list_base(_Fwd_list_base&&,
const _Node_alloc_type&)): Add.
(forward_list<>::forward_list(const _Alloc&),
forward_list(const forward_list&, const _Alloc&),
forward_list(forward_list&&, const _Alloc&),
forward_list(size_type, const _Tp&, const _Alloc&),
forward_list(_InputIterator, _InputIterator, const _Alloc&),
forward_list(std::initializer_list<>, const _Alloc&),
get_allocator): Adjust.
* include/bits/forward_list.tcc
* testsuite/util/testsuite_allocator.h (ExplicitConsAlloc): Add.
* testsuite/23_containers/unordered_map/requirements/
explicit_instantiation/5.cc: New.
* testsuite/23_containers/multimap/requirements/
explicit_instantiation/5.cc: Likewise.
* testsuite/23_containers/multimap/requirements/
explicit_instantiation/5_c++0x.cc: Likewise.
* testsuite/23_containers/set/requirements/explicit_instantiation/
5.cc: Likewise.
* testsuite/23_containers/set/requirements/explicit_instantiation/
5_c++0x.cc: Likewise.
* testsuite/23_containers/unordered_multimap/requirements/
explicit_instantiation/5.cc: Likewise.
* testsuite/23_containers/forward_list/requirements/
explicit_instantiation/5.cc: Likewise.
* testsuite/23_containers/unordered_set/requirements/
explicit_instantiation/5.cc: Likewise.
testsuite/23_containers/multiset/requirements/explicit_instantiation/
5.cc: Likewise.
* testsuite/23_containers/multiset/requirements/
explicit_instantiation/5_c++0x.cc: Likewise.
* testsuite/23_containers/list/requirements/explicit_instantiation/
5_c++0x.cc: Likewise.
* testsuite/23_containers/list/requirements/explicit_instantiation/
5.cc: Likewise.
* testsuite/23_containers/unordered_multiset/requirements/
explicit_instantiation/5.cc: Likewise.
* testsuite/23_containers/map/requirements/explicit_instantiation/
5.cc: Likewise.
* testsuite/23_containers/map/requirements/explicit_instantiation/
5_c++0x.cc: Likewise.
* testsuite/23_containers/forward_list/requirements/dr438/
assign_neg.cc: Adjust dg-error line number.
* testsuite/23_containers/forward_list/requirements/dr438/
insert_neg.cc: Likewise.
* testsuite/23_containers/forward_list/requirements/dr438/
constructor_1_neg.cc: Likewise.
* testsuite/23_containers/forward_list/requirements/dr438/
constructor_2_neg.cc: Likewise.
* testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
Likewise.
* testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
Likewise.
* testsuite/23_containers/list/requirements/dr438/
constructor_1_neg.cc: Likewise.
* testsuite/23_containers/list/requirements/dr438/
constructor_2_neg.cc: Likewise.
Added:
trunk/libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/5.cc
trunk/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/5.cc
trunk/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/5_c++0x.cc
trunk/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/5.cc
trunk/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/5_c++0x.cc
trunk/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/5.cc
trunk/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/5_c++0x.cc
trunk/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5.cc
trunk/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5_c++0x.cc
trunk/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/5.cc
trunk/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/5_c++0x.cc
trunk/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/5.cc
trunk/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/5.cc
trunk/libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/5.cc
trunk/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/5.cc
Modified:
trunk/libstdc++-v3/ChangeLog
trunk/libstdc++-v3/include/bits/forward_list.h
trunk/libstdc++-v3/include/bits/forward_list.tcc
trunk/libstdc++-v3/include/bits/stl_list.h
trunk/libstdc++-v3/include/bits/stl_map.h
trunk/libstdc++-v3/include/bits/stl_multimap.h
trunk/libstdc++-v3/include/bits/stl_multiset.h
trunk/libstdc++-v3/include/bits/stl_set.h
trunk/libstdc++-v3/include/bits/stl_tree.h
trunk/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc
trunk/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc
trunk/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc
trunk/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc
trunk/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
trunk/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
trunk/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
trunk/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
trunk/libstdc++-v3/testsuite/util/testsuite_allocator.h
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug libstdc++/50118] node-based containers cannot use allocators with explicit constructor template
2011-08-18 14:38 [Bug libstdc++/50118] New: node-based containers cannot use allocators with explicit constructor template redi at gcc dot gnu.org
2011-08-18 15:03 ` [Bug libstdc++/50118] " paolo.carlini at oracle dot com
2011-08-29 13:43 ` paolo at gcc dot gnu.org
@ 2011-08-29 13:44 ` paolo.carlini at oracle dot com
2 siblings, 0 replies; 4+ messages in thread
From: paolo.carlini at oracle dot com @ 2011-08-29 13:44 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50118
Paolo Carlini <paolo.carlini at oracle dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
--- Comment #3 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-08-29 13:43:09 UTC ---
Fixed for 4.7.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-08-29 13:43 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-18 14:38 [Bug libstdc++/50118] New: node-based containers cannot use allocators with explicit constructor template redi at gcc dot gnu.org
2011-08-18 15:03 ` [Bug libstdc++/50118] " paolo.carlini at oracle dot com
2011-08-29 13:43 ` paolo at gcc dot gnu.org
2011-08-29 13:44 ` paolo.carlini at oracle dot com
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).