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).