PR77528 add default constructors for container adaptors
PR libstdc++/77528 * include/bits/stl_queue.h (queue::c): Add default member initializer. (queue::queue()): Add constructor and define as defaulted. (queue::queue(_Sequence&&)): Remove default argument. (priority_queue::c, priority_queue::comp): Add default member initializers. (priority_queue::priority_queue()): Add constructor and define as defaulted. (priority_queue::priority_queue(const _Compare&, _Sequence&&)): Remove default argument for first parameter. * include/bits/stl_stack.h (stack::c): Add default member initializer. (stack::stack()): Add constructor and define as defaulted. (stack::stack(const _Sequence&)): Remove default argument. * testsuite/23_containers/priority_queue/requirements/ explicit_instantiation/1.cc: Test explicit instantiation with non-DefaultConstructible sequence. * testsuite/23_containers/priority_queue/77528.cc: New test. * testsuite/23_containers/priority_queue/requirements/ explicit_instantiation/1_c++0x.cc: Replace with 1_c++98.cc. * testsuite/23_containers/queue/77528.cc: New test. * testsuite/23_containers/queue/requirements/explicit_instantiation/ 1.cc: Test explicit instantiation with non-DefaultConstructible sequence. * testsuite/23_containers/queue/requirements/explicit_instantiation/ 1_c++0x.cc: Replace with 1_c++98.cc. * testsuite/23_containers/stack/77528.cc: New test. * testsuite/23_containers/stack/requirements/explicit_instantiation/ 1.cc: Test explicit instantiation with non-DefaultConstructible sequence. * testsuite/23_containers/stack/requirements/explicit_instantiation/ 1_c++0x.cc: Replace with 1_c++98.cc. From-SVN: r244278
This commit is contained in:
parent
034afd0231
commit
d2e1d4b713
@ -1,3 +1,37 @@
|
||||
2017-01-10 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/77528
|
||||
* include/bits/stl_queue.h (queue::c): Add default member initializer.
|
||||
(queue::queue()): Add constructor and define as defaulted.
|
||||
(queue::queue(_Sequence&&)): Remove default argument.
|
||||
(priority_queue::c, priority_queue::comp): Add default member
|
||||
initializers.
|
||||
(priority_queue::priority_queue()): Add constructor and define as
|
||||
defaulted.
|
||||
(priority_queue::priority_queue(const _Compare&, _Sequence&&)):
|
||||
Remove default argument for first parameter.
|
||||
* include/bits/stl_stack.h (stack::c): Add default member initializer.
|
||||
(stack::stack()): Add constructor and define as defaulted.
|
||||
(stack::stack(const _Sequence&)): Remove default argument.
|
||||
* testsuite/23_containers/priority_queue/requirements/
|
||||
explicit_instantiation/1.cc: Test explicit instantiation with
|
||||
non-DefaultConstructible sequence.
|
||||
* testsuite/23_containers/priority_queue/77528.cc: New test.
|
||||
* testsuite/23_containers/priority_queue/requirements/
|
||||
explicit_instantiation/1_c++0x.cc: Replace with 1_c++98.cc.
|
||||
* testsuite/23_containers/queue/77528.cc: New test.
|
||||
* testsuite/23_containers/queue/requirements/explicit_instantiation/
|
||||
1.cc: Test explicit instantiation with non-DefaultConstructible
|
||||
sequence.
|
||||
* testsuite/23_containers/queue/requirements/explicit_instantiation/
|
||||
1_c++0x.cc: Replace with 1_c++98.cc.
|
||||
* testsuite/23_containers/stack/77528.cc: New test.
|
||||
* testsuite/23_containers/stack/requirements/explicit_instantiation/
|
||||
1.cc: Test explicit instantiation with non-DefaultConstructible
|
||||
sequence.
|
||||
* testsuite/23_containers/stack/requirements/explicit_instantiation/
|
||||
1_c++0x.cc: Replace with 1_c++98.cc.
|
||||
|
||||
2017-01-10 Felipe Magno de Almeida <felipe@expertisesolutions.com.br>
|
||||
|
||||
* include/bits/locale_facets_nonio.tcc
|
||||
|
@ -124,15 +124,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
typedef _Sequence container_type;
|
||||
|
||||
protected:
|
||||
/**
|
||||
* 'c' is the underlying container. Maintainers wondering why
|
||||
* this isn't uglified as per style guidelines should note that
|
||||
* this name is specified in the standard, [23.2.3.1]. (Why?
|
||||
* Presumably for the same reason that it's protected instead
|
||||
/* Maintainers wondering why this isn't uglified as per style
|
||||
* guidelines should note that this name is specified in the standard,
|
||||
* C++98 [23.2.3.1].
|
||||
* (Why? Presumably for the same reason that it's protected instead
|
||||
* of private: to allow derivation. But none of the other
|
||||
* containers allow for derivation. Odd.)
|
||||
*/
|
||||
/// @c c is the underlying container.
|
||||
#if __cplusplus >= 201103L
|
||||
_Sequence c{};
|
||||
#else
|
||||
_Sequence c;
|
||||
#endif
|
||||
|
||||
public:
|
||||
/**
|
||||
@ -143,12 +147,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
queue(const _Sequence& __c = _Sequence())
|
||||
: c(__c) { }
|
||||
#else
|
||||
queue() = default;
|
||||
|
||||
explicit
|
||||
queue(const _Sequence& __c)
|
||||
: c(__c) { }
|
||||
|
||||
explicit
|
||||
queue(_Sequence&& __c = _Sequence())
|
||||
queue(_Sequence&& __c)
|
||||
: c(std::move(__c)) { }
|
||||
|
||||
template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
|
||||
@ -440,8 +446,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
protected:
|
||||
// See queue::c for notes on these names.
|
||||
_Sequence c;
|
||||
#if __cplusplus >= 201103L
|
||||
_Sequence c{};
|
||||
_Compare comp{};
|
||||
#else
|
||||
_Sequence c;
|
||||
_Compare comp;
|
||||
#endif
|
||||
|
||||
public:
|
||||
/**
|
||||
@ -454,6 +465,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
: c(__s), comp(__x)
|
||||
{ std::make_heap(c.begin(), c.end(), comp); }
|
||||
#else
|
||||
priority_queue() = default;
|
||||
|
||||
explicit
|
||||
priority_queue(const _Compare& __x,
|
||||
const _Sequence& __s)
|
||||
@ -461,7 +474,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
{ std::make_heap(c.begin(), c.end(), comp); }
|
||||
|
||||
explicit
|
||||
priority_queue(const _Compare& __x = _Compare(),
|
||||
priority_queue(const _Compare& __x,
|
||||
_Sequence&& __s = _Sequence())
|
||||
: c(std::move(__s)), comp(__x)
|
||||
{ std::make_heap(c.begin(), c.end(), comp); }
|
||||
|
@ -129,7 +129,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
protected:
|
||||
// See queue::c for notes on this name.
|
||||
#if __cplusplus >= 201103L
|
||||
_Sequence c{};
|
||||
#else
|
||||
_Sequence c;
|
||||
#endif
|
||||
|
||||
public:
|
||||
// XXX removed old def ctor, added def arg to this one to match 14882
|
||||
@ -141,12 +145,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
stack(const _Sequence& __c = _Sequence())
|
||||
: c(__c) { }
|
||||
#else
|
||||
stack() = default;
|
||||
|
||||
explicit
|
||||
stack(const _Sequence& __c)
|
||||
: c(__c) { }
|
||||
|
||||
explicit
|
||||
stack(_Sequence&& __c = _Sequence())
|
||||
stack(_Sequence&& __c)
|
||||
: c(std::move(__c)) { }
|
||||
|
||||
template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
|
||||
|
39
libstdc++-v3/testsuite/23_containers/priority_queue/77528.cc
Normal file
39
libstdc++-v3/testsuite/23_containers/priority_queue/77528.cc
Normal file
@ -0,0 +1,39 @@
|
||||
// Copyright (C) 2017 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 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 COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do run { target c++11 } }
|
||||
|
||||
#include <queue>
|
||||
|
||||
struct NoCopying : std::vector<int>
|
||||
{
|
||||
NoCopying() = default;
|
||||
NoCopying(const NoCopying& x) : std::vector<int>(x)
|
||||
{ throw std::bad_alloc(); }
|
||||
};
|
||||
|
||||
void
|
||||
test01()
|
||||
{
|
||||
std::priority_queue<int, NoCopying> q;
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
test01();
|
||||
}
|
@ -23,3 +23,11 @@
|
||||
#include <queue>
|
||||
|
||||
template class std::priority_queue<int>;
|
||||
|
||||
struct NonDefaultConstructible : std::vector<int> {
|
||||
NonDefaultConstructible(int) { }
|
||||
};
|
||||
struct Cmp : std::less<int> {
|
||||
Cmp(int) { }
|
||||
};
|
||||
template class std::priority_queue<int, NonDefaultConstructible>;
|
||||
|
@ -1,4 +1,5 @@
|
||||
// { dg-do compile { target c++11 } }
|
||||
// { dg-options "-std=gnu++98" }
|
||||
// { dg-do compile }
|
||||
|
||||
// Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
||||
//
|
||||
@ -22,3 +23,11 @@
|
||||
#include <queue>
|
||||
|
||||
template class std::priority_queue<int>;
|
||||
|
||||
struct NonDefaultConstructible : std::vector<int> {
|
||||
NonDefaultConstructible(int) { }
|
||||
};
|
||||
struct Cmp : std::less<int> {
|
||||
Cmp(int) { }
|
||||
};
|
||||
template class std::priority_queue<int, NonDefaultConstructible, Cmp>;
|
39
libstdc++-v3/testsuite/23_containers/queue/77528.cc
Normal file
39
libstdc++-v3/testsuite/23_containers/queue/77528.cc
Normal file
@ -0,0 +1,39 @@
|
||||
// Copyright (C) 2017 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 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 COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do run { target c++11 } }
|
||||
|
||||
#include <queue>
|
||||
|
||||
struct NoCopying : std::deque<int>
|
||||
{
|
||||
NoCopying() = default;
|
||||
NoCopying(const NoCopying& x) : std::deque<int>(x)
|
||||
{ throw std::bad_alloc(); }
|
||||
};
|
||||
|
||||
void
|
||||
test01()
|
||||
{
|
||||
std::queue<int, NoCopying> q;
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
test01();
|
||||
}
|
@ -23,3 +23,8 @@
|
||||
#include <queue>
|
||||
|
||||
template class std::queue<int>;
|
||||
|
||||
struct NonDefaultConstructible : std::deque<int> {
|
||||
NonDefaultConstructible(int) { }
|
||||
};
|
||||
template class std::queue<int, NonDefaultConstructible>;
|
||||
|
@ -1,4 +1,5 @@
|
||||
// { dg-do compile { target c++11 } }
|
||||
// { dg-options "-std=gnu++98" }
|
||||
// { dg-do compile }
|
||||
|
||||
// Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
||||
//
|
||||
@ -22,3 +23,8 @@
|
||||
#include <queue>
|
||||
|
||||
template class std::queue<int>;
|
||||
|
||||
struct NonDefaultConstructible : std::deque<int> {
|
||||
NonDefaultConstructible(int) { }
|
||||
};
|
||||
template class std::queue<int, NonDefaultConstructible>;
|
39
libstdc++-v3/testsuite/23_containers/stack/77528.cc
Normal file
39
libstdc++-v3/testsuite/23_containers/stack/77528.cc
Normal file
@ -0,0 +1,39 @@
|
||||
// Copyright (C) 2017 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 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 COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do run { target c++11 } }
|
||||
|
||||
#include <stack>
|
||||
|
||||
struct NoCopying : std::deque<int>
|
||||
{
|
||||
NoCopying() = default;
|
||||
NoCopying(const NoCopying& x) : std::deque<int>(x)
|
||||
{ throw std::bad_alloc(); }
|
||||
};
|
||||
|
||||
void
|
||||
test01()
|
||||
{
|
||||
std::stack<int, NoCopying> s;
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
test01();
|
||||
}
|
@ -23,3 +23,8 @@
|
||||
#include <stack>
|
||||
|
||||
template class std::stack<int>;
|
||||
|
||||
struct NonDefaultConstructible : std::deque<int> {
|
||||
NonDefaultConstructible(int) { }
|
||||
};
|
||||
template class std::stack<int, NonDefaultConstructible>;
|
||||
|
@ -1,4 +1,5 @@
|
||||
// { dg-do compile { target c++11 } }
|
||||
// { dg-options "-std=gnu++98" }
|
||||
// { dg-do compile }
|
||||
|
||||
// Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
||||
//
|
||||
@ -22,3 +23,8 @@
|
||||
#include <stack>
|
||||
|
||||
template class std::stack<int>;
|
||||
|
||||
struct NonDefaultConstructible : std::deque<int> {
|
||||
NonDefaultConstructible(int) { }
|
||||
};
|
||||
template class std::stack<int, NonDefaultConstructible>;
|
Loading…
Reference in New Issue
Block a user