Hi, tested x86_64-linux, committed mainline and branch.
Thanks, Paolo. ///////////////////////
2012-04-22 Paolo Carlini <paolo.carl...@oracle.com> PR libstdc++/53067 * include/bits/hashtable_policy.h: Change inheritances to public. * testsuite/23_containers/unordered_map/requirements/53067.cc: New. * testsuite/23_containers/unordered_set/requirements/53067.cc: Likewise.
Index: include/bits/hashtable_policy.h =================================================================== --- include/bits/hashtable_policy.h (revision 186674) +++ include/bits/hashtable_policy.h (working copy) @@ -882,7 +882,9 @@ /// Specialization using EBO. template<int _Nm, typename _Tp> - struct _Hashtable_ebo_helper<_Nm, _Tp, true> : private _Tp + struct _Hashtable_ebo_helper<_Nm, _Tp, true> + // See PR53067. + : public _Tp { _Hashtable_ebo_helper() = default; @@ -949,8 +951,9 @@ template<typename _Key, typename _Value, typename _ExtractKey, typename _H1, typename _H2, typename _Hash> struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2, _Hash, false> - : private _Hashtable_ebo_helper<0, _ExtractKey>, - private _Hashtable_ebo_helper<1, _Hash> + // See PR53067. + : public _Hashtable_ebo_helper<0, _ExtractKey>, + public _Hashtable_ebo_helper<1, _Hash> { private: typedef _Hashtable_ebo_helper<0, _ExtractKey> _EboExtractKey; @@ -1025,9 +1028,10 @@ typename _H1, typename _H2> struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2, _Default_ranged_hash, false> - : private _Hashtable_ebo_helper<0, _ExtractKey>, - private _Hashtable_ebo_helper<1, _H1>, - private _Hashtable_ebo_helper<2, _H2> + // See PR53067. + : public _Hashtable_ebo_helper<0, _ExtractKey>, + public _Hashtable_ebo_helper<1, _H1>, + public _Hashtable_ebo_helper<2, _H2> { private: typedef _Hashtable_ebo_helper<0, _ExtractKey> _EboExtractKey; @@ -1108,9 +1112,10 @@ typename _H1, typename _H2> struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2, _Default_ranged_hash, true> - : private _Hashtable_ebo_helper<0, _ExtractKey>, - private _Hashtable_ebo_helper<1, _H1>, - private _Hashtable_ebo_helper<2, _H2> + // See PR53067. + : public _Hashtable_ebo_helper<0, _ExtractKey>, + public _Hashtable_ebo_helper<1, _H1>, + public _Hashtable_ebo_helper<2, _H2> { private: typedef _Hashtable_ebo_helper<0, _ExtractKey> _EboExtractKey; @@ -1229,7 +1234,8 @@ typename _H1, typename _H2, typename _Hash> struct _Local_iterator_base<_Key, _Value, _ExtractKey, _H1, _H2, _Hash, true> - : private _H2 + // See PR53067. + : public _H2 { _Local_iterator_base() = default; _Local_iterator_base(_Hash_node<_Value, true>* __p, @@ -1261,8 +1267,9 @@ typename _H1, typename _H2, typename _Hash> struct _Local_iterator_base<_Key, _Value, _ExtractKey, _H1, _H2, _Hash, false> - : private _Hash_code_base<_Key, _Value, _ExtractKey, - _H1, _H2, _Hash, false> + // See PR53067. + : public _Hash_code_base<_Key, _Value, _ExtractKey, + _H1, _H2, _Hash, false> { _Local_iterator_base() = default; _Local_iterator_base(_Hash_node<_Value, false>* __p, @@ -1421,9 +1428,10 @@ typename _ExtractKey, typename _Equal, typename _H1, typename _H2, typename _Hash, typename _Traits> struct _Hashtable_base + // See PR53067. : public _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2, _Hash, - _Traits::__hash_cached::value>, - private _Hashtable_ebo_helper<0, _Equal> + _Traits::__hash_cached::value>, + public _Hashtable_ebo_helper<0, _Equal> { public: typedef _Key key_type; Index: testsuite/23_containers/unordered_map/requirements/53067.cc =================================================================== --- testsuite/23_containers/unordered_map/requirements/53067.cc (revision 0) +++ testsuite/23_containers/unordered_map/requirements/53067.cc (revision 0) @@ -0,0 +1,28 @@ +// { dg-do compile } +// { dg-options "-std=gnu++11" } + +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <unordered_map> +#include <functional> + +void f() +{ + std::unordered_map<int, int> Foo; + ref(Foo); +} Index: testsuite/23_containers/unordered_set/requirements/53067.cc =================================================================== --- testsuite/23_containers/unordered_set/requirements/53067.cc (revision 0) +++ testsuite/23_containers/unordered_set/requirements/53067.cc (revision 0) @@ -0,0 +1,28 @@ +// { dg-do compile } +// { dg-options "-std=gnu++11" } + +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <unordered_set> +#include <functional> + +void f() +{ + std::unordered_set<int> Foo; + ref(Foo); +}