public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/58265] New: std::string move assignment should be noexcept
@ 2013-08-28 21:27 f.heckenbach@fh-soft.de
2013-08-28 21:48 ` [Bug libstdc++/58265] " paolo.carlini at oracle dot com
` (7 more replies)
0 siblings, 8 replies; 9+ messages in thread
From: f.heckenbach@fh-soft.de @ 2013-08-28 21:27 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58265
Bug ID: 58265
Summary: std::string move assignment should be noexcept
Product: gcc
Version: 4.8.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: f.heckenbach@fh-soft.de
According to http://www.cplusplus.com/reference/string/string/operator=/,
the std::string move assignment operator should be noexcept.
#include <string>
static_assert (std::is_nothrow_move_assignable <std::string>::value, "failed");
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug libstdc++/58265] std::string move assignment should be noexcept
2013-08-28 21:27 [Bug libstdc++/58265] New: std::string move assignment should be noexcept f.heckenbach@fh-soft.de
@ 2013-08-28 21:48 ` paolo.carlini at oracle dot com
2013-08-28 21:57 ` paolo.carlini at oracle dot com
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: paolo.carlini at oracle dot com @ 2013-08-28 21:48 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58265
Paolo Carlini <paolo.carlini at oracle dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |ASSIGNED
Last reconfirmed| |2013-08-28
Assignee|unassigned at gcc dot gnu.org |paolo.carlini at oracle dot com
Target Milestone|--- |4.9.0
Ever confirmed|0 |1
--- Comment #1 from Paolo Carlini <paolo.carlini at oracle dot com> ---
I'll fix this asap, very simple to do, but note that until we break the ABI
basic_string will remain nonconforming in many serious ways.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug libstdc++/58265] std::string move assignment should be noexcept
2013-08-28 21:27 [Bug libstdc++/58265] New: std::string move assignment should be noexcept f.heckenbach@fh-soft.de
2013-08-28 21:48 ` [Bug libstdc++/58265] " paolo.carlini at oracle dot com
@ 2013-08-28 21:57 ` paolo.carlini at oracle dot com
2013-08-31 10:21 ` daniel.kruegler at googlemail dot com
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: paolo.carlini at oracle dot com @ 2013-08-28 21:57 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58265
Paolo Carlini <paolo.carlini at oracle dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.9.0 |---
--- Comment #2 from Paolo Carlini <paolo.carlini at oracle dot com> ---
As a matter of fact, isn't, in our current implementation, because std::swap
itself isn't in case the allocators are not equal.
I can preliminarily adjust it for ext/vstring.h (a preview of the future c++11
conforming basic_string) but it still needs work as regards the C++11 memory
allocation model.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug libstdc++/58265] std::string move assignment should be noexcept
2013-08-28 21:27 [Bug libstdc++/58265] New: std::string move assignment should be noexcept f.heckenbach@fh-soft.de
2013-08-28 21:48 ` [Bug libstdc++/58265] " paolo.carlini at oracle dot com
2013-08-28 21:57 ` paolo.carlini at oracle dot com
@ 2013-08-31 10:21 ` daniel.kruegler at googlemail dot com
2013-09-20 15:50 ` [Bug libstdc++/58265] [lwg/2063] " glisse at gcc dot gnu.org
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: daniel.kruegler at googlemail dot com @ 2013-08-31 10:21 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58265
Daniel Krügler <daniel.kruegler at googlemail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |daniel.kruegler@googlemail.
| |com
--- Comment #3 from Daniel Krügler <daniel.kruegler at googlemail dot com> ---
Similar to containers the move-assignment operator of basic_string should not
be noexcept, because they have a narrow contract. The fact that the
specification currently requires this, is a defect. This is
http://cplusplus.github.io/LWG/lwg-active.html#2063
>From gcc-bugs-return-428744-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Sat Aug 31 10:40:59 2013
Return-Path: <gcc-bugs-return-428744-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 18628 invoked by alias); 31 Aug 2013 10:40:59 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 18292 invoked by uid 48); 31 Aug 2013 10:40:55 -0000
From: "paolo.carlini at oracle dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug libstdc++/58265] [lwg/2063] std::string move assignment should be noexcept
Date: Sat, 31 Aug 2013 10:40:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: libstdc++
X-Bugzilla-Version: 4.8.1
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: paolo.carlini at oracle dot com
X-Bugzilla-Status: SUSPENDED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: paolo.carlini at oracle dot com
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: bug_status short_desc
Message-ID: <bug-58265-4-zLfURoMS5s@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-58265-4@http.gcc.gnu.org/bugzilla/>
References: <bug-58265-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2013-08/txt/msg01668.txt.bz2
Content-length: 1000
http://gcc.gnu.org/bugzilla/show_bug.cgi?idX265
Paolo Carlini <paolo.carlini at oracle dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |SUSPENDED
Summary|std::string move assignment |[lwg/2063] std::string move
|should be noexcept |assignment should be
| |noexcept
--- Comment #4 from Paolo Carlini <paolo.carlini at oracle dot com> ---
Thanks Daniel. I knew that we would have to revisit this anyway when the C++11
allocator model is implemented for the C++11 conforming basic_string. All in
all, I guess better suspending this for the time being.
Since, as-is, the move assignment of ext/vstring is in fact noexcept, we may
want to declare it as such however. By the way, I seem to remember that Jon has
work almost ready for the C++11 conformance of it.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug libstdc++/58265] [lwg/2063] std::string move assignment should be noexcept
2013-08-28 21:27 [Bug libstdc++/58265] New: std::string move assignment should be noexcept f.heckenbach@fh-soft.de
` (2 preceding siblings ...)
2013-08-31 10:21 ` daniel.kruegler at googlemail dot com
@ 2013-09-20 15:50 ` glisse at gcc dot gnu.org
2013-09-24 10:07 ` glisse at gcc dot gnu.org
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: glisse at gcc dot gnu.org @ 2013-09-20 15:50 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58265
--- Comment #5 from Marc Glisse <glisse at gcc dot gnu.org> ---
Author: glisse
Date: Fri Sep 20 15:50:09 2013
New Revision: 202781
URL: http://gcc.gnu.org/viewcvs?rev=202781&root=gcc&view=rev
Log:
2013-09-20 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/58338
* include/bits/allocator.h (__alloc_swap::_S_do_it,
__shrink_to_fit_aux::_S_do_it): Mark as noexcept.
* include/bits/basic_string.h (basic_string::_Rep) [_S_empty_rep,
_M_is_leaked, _M_is_shared, _M_set_leaked, _M_set_sharable,
_M_set_length_and_sharable, _M_dispose]: Likewise.
(basic_string::_Alloc_hider::_Alloc_hider): Likewise.
(basic_string) [_M_data, _M_rep, _M_ibegin, _M_iend, _M_limit,
_M_disjunct, _M_copy, _M_move, _M_assign, _S_copy_chars, _S_compare,
_S_empty_rep, shrink_to_fit, operator[] const, front const, back const]:
Likewise.
[clear]: Link to PR 56166.
[swap]: Link to PR 58265.
* include/bits/stl_deque.h (_Deque_iterator) [_S_buffer_size,
_Deque_iterator, _M_const_cast, operator*, operator->, operator++,
operator--, operator+=, operator+, operator-=, operator-, operator[],
_M_set_node]: Mark as noexcept.
(operator==(const _Deque_iterator&, const _Deque_iterator&),
operator!=(const _Deque_iterator&, const _Deque_iterator&),
operator<(const _Deque_iterator&, const _Deque_iterator&),
operator>(const _Deque_iterator&, const _Deque_iterator&),
operator<=(const _Deque_iterator&, const _Deque_iterator&),
operator>=(const _Deque_iterator&, const _Deque_iterator&),
operator-(const _Deque_iterator&, const _Deque_iterator&),
operator+(ptrdiff_t, const _Deque_iterator&)): Likewise.
(_Deque_base) [_Deque_base(const allocator_type&)]: Add missing call to
_M_initialize_map.
[~_Deque_base, _M_deallocate_node, _M_deallocate_map, _M_destroy_nodes]:
Mark as noexcept.
(_Deque_base::_Deque_impl) [_Deque_impl(const _Tp_alloc_type&),
_Deque_impl(_Tp_alloc_type&&)]: Likewise.
(deque) [_S_buffer_size, operator=(deque&&), shrink_to_fit, operator[],
front, back, pop_front, pop_back, swap]: Likewise.
[deque(), deque(const allocator_type&)]: Merge.
* include/debug/deque (deque) [operator=(deque&&), shrink_to_fit,
operator[], front, back, pop_front, pop_back, swap]: Mark as noexcept.
* include/profile/deque (deque) [operator=(deque&&), operator[], front,
back, pop_front, pop_back, swap]: Likewise.
* testsuite/23_containers/deque/requirements/dr438/assign_neg.cc:
Adjust line number.
* testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc:
Likewise.
* testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc:
Likewise.
* testsuite/23_containers/deque/requirements/dr438/insert_neg.cc:
Likewise.
Modified:
trunk/libstdc++-v3/ChangeLog
trunk/libstdc++-v3/include/bits/allocator.h
trunk/libstdc++-v3/include/bits/basic_string.h
trunk/libstdc++-v3/include/bits/stl_deque.h
trunk/libstdc++-v3/include/debug/deque
trunk/libstdc++-v3/include/profile/deque
trunk/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
trunk/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
trunk/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
trunk/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug libstdc++/58265] [lwg/2063] std::string move assignment should be noexcept
2013-08-28 21:27 [Bug libstdc++/58265] New: std::string move assignment should be noexcept f.heckenbach@fh-soft.de
` (3 preceding siblings ...)
2013-09-20 15:50 ` [Bug libstdc++/58265] [lwg/2063] " glisse at gcc dot gnu.org
@ 2013-09-24 10:07 ` glisse at gcc dot gnu.org
2015-07-17 11:14 ` redi at gcc dot gnu.org
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: glisse at gcc dot gnu.org @ 2013-09-24 10:07 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58265
--- Comment #6 from Marc Glisse <glisse at gcc dot gnu.org> ---
Author: glisse
Date: Tue Sep 24 10:07:32 2013
New Revision: 202861
URL: http://gcc.gnu.org/viewcvs?rev=202861&root=gcc&view=rev
Log:
2013-09-24 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/58338
PR libstdc++/56166
* include/bits/basic_string.h (basic_string)
[basic_string(basic_string&&)]: Make the noexcept conditional.
[operator=(basic_string&&), assign(basic_string&&)]: Link to PR 58265.
[begin(), end(), rbegin(), rend(), clear]: Remove noexcept.
[pop_back]: Comment on the lack of noexcept.
* include/debug/string (basic_string) [basic_string(const _Allocator&),
basic_string(basic_string&&), begin(), end(), rbegin(), rend(), clear,
operator[](size_type), pop_back]: Comment out noexcept, until vstring
replaces basic_string.
Modified:
trunk/libstdc++-v3/ChangeLog
trunk/libstdc++-v3/include/bits/basic_string.h
trunk/libstdc++-v3/include/debug/string
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug libstdc++/58265] [lwg/2063] std::string move assignment should be noexcept
2013-08-28 21:27 [Bug libstdc++/58265] New: std::string move assignment should be noexcept f.heckenbach@fh-soft.de
` (4 preceding siblings ...)
2013-09-24 10:07 ` glisse at gcc dot gnu.org
@ 2015-07-17 11:14 ` redi at gcc dot gnu.org
2015-09-11 11:02 ` redi at gcc dot gnu.org
2015-09-11 11:03 ` redi at gcc dot gnu.org
7 siblings, 0 replies; 9+ messages in thread
From: redi at gcc dot gnu.org @ 2015-07-17 11:14 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58265
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|SUSPENDED |ASSIGNED
Assignee|paolo.carlini at oracle dot com |redi at gcc dot gnu.org
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I've been working on LWG2063 but forgot there was this PR for it.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug libstdc++/58265] [lwg/2063] std::string move assignment should be noexcept
2013-08-28 21:27 [Bug libstdc++/58265] New: std::string move assignment should be noexcept f.heckenbach@fh-soft.de
` (5 preceding siblings ...)
2015-07-17 11:14 ` redi at gcc dot gnu.org
@ 2015-09-11 11:02 ` redi at gcc dot gnu.org
2015-09-11 11:03 ` redi at gcc dot gnu.org
7 siblings, 0 replies; 9+ messages in thread
From: redi at gcc dot gnu.org @ 2015-09-11 11:02 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58265
--- Comment #9 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Author: redi
Date: Fri Sep 11 11:02:14 2015
New Revision: 227681
URL: https://gcc.gnu.org/viewcvs?rev=227681&root=gcc&view=rev
Log:
Implement N4258 noexcept for std::basic_string.
PR libstdc++/58265
* doc/xml/manual/intro.xml: Document LWG 2063 and 2064 resolutions.
* doc/html/manual/bugs.html: Regenerate.
* include/bits/basic_string.h (basic_string): Implement N4258. Add
correct exception-specifications and propagate allocators correctly.
* include/bits/basic_string.tcc (basic_string::swap): Propagate
allocators correctly.
* include/debug/string (__gnu_debug::basic_string): Add correct
exceptions-specifications and allcoator-extended constructors.
* testsuite/21_strings/basic_string/allocator/char/copy.cc: New.
* testsuite/21_strings/basic_string/allocator/char/copy_assign.cc:
New.
* testsuite/21_strings/basic_string/allocator/char/minimal.cc: New.
* testsuite/21_strings/basic_string/allocator/char/move.cc: New.
* testsuite/21_strings/basic_string/allocator/char/move_assign.cc:
New.
* testsuite/21_strings/basic_string/allocator/char/noexcept.cc: New.
* testsuite/21_strings/basic_string/allocator/char/swap.cc: New.
* testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc: New.
* testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc:
New.
* testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc: New.
* testsuite/21_strings/basic_string/allocator/wchar_t/move.cc: New.
* testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc:
New.
* testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc: New.
* testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc: New.
* testsuite/util/testsuite_allocator.h (tracker_allocator): Define
defaulted assignment operators.
Added:
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy_assign.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/minimal.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/move.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/move_assign.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/noexcept.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/swap.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/move.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc
trunk/libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc
Modified:
trunk/libstdc++-v3/ChangeLog
trunk/libstdc++-v3/doc/html/manual/bugs.html
trunk/libstdc++-v3/doc/xml/manual/intro.xml
trunk/libstdc++-v3/include/bits/basic_string.h
trunk/libstdc++-v3/include/bits/basic_string.tcc
trunk/libstdc++-v3/include/debug/string
trunk/libstdc++-v3/testsuite/util/testsuite_allocator.h
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug libstdc++/58265] [lwg/2063] std::string move assignment should be noexcept
2013-08-28 21:27 [Bug libstdc++/58265] New: std::string move assignment should be noexcept f.heckenbach@fh-soft.de
` (6 preceding siblings ...)
2015-09-11 11:02 ` redi at gcc dot gnu.org
@ 2015-09-11 11:03 ` redi at gcc dot gnu.org
7 siblings, 0 replies; 9+ messages in thread
From: redi at gcc dot gnu.org @ 2015-09-11 11:03 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58265
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution|--- |FIXED
Target Milestone|--- |6.0
--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Fixed on trunk.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2015-09-11 11:03 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-28 21:27 [Bug libstdc++/58265] New: std::string move assignment should be noexcept f.heckenbach@fh-soft.de
2013-08-28 21:48 ` [Bug libstdc++/58265] " paolo.carlini at oracle dot com
2013-08-28 21:57 ` paolo.carlini at oracle dot com
2013-08-31 10:21 ` daniel.kruegler at googlemail dot com
2013-09-20 15:50 ` [Bug libstdc++/58265] [lwg/2063] " glisse at gcc dot gnu.org
2013-09-24 10:07 ` glisse at gcc dot gnu.org
2015-07-17 11:14 ` redi at gcc dot gnu.org
2015-09-11 11:02 ` redi at gcc dot gnu.org
2015-09-11 11:03 ` redi at gcc dot gnu.org
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).