Remove noexcept from function template that can throw
PR libstdc++/69092 * include/bits/basic_string.h (basic_string::_S_copy_chars<_Iterator>): Remove _GLIBCXX_NOEXCEPT. testsuite/21_strings/basic_string/cons/char/69092.cc: New. From-SVN: r232112
This commit is contained in:
parent
5027395ec6
commit
373a75fb2a
3 changed files with 63 additions and 2 deletions
|
@ -1,5 +1,10 @@
|
|||
2016-01-06 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/69092
|
||||
* include/bits/basic_string.h (basic_string::_S_copy_chars<_Iterator>):
|
||||
Remove _GLIBCXX_NOEXCEPT.
|
||||
testsuite/21_strings/basic_string/cons/char/69092.cc: New.
|
||||
|
||||
* include/Makefile.am: Adjust.
|
||||
* include/Makefile.in: Regenerate.
|
||||
* include/bits/mutex.h: Rename to bits/std_mutex.h.
|
||||
|
|
|
@ -323,7 +323,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
|
|||
template<class _Iterator>
|
||||
static void
|
||||
_S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2)
|
||||
_GLIBCXX_NOEXCEPT
|
||||
{
|
||||
for (; __k1 != __k2; ++__k1, (void)++__p)
|
||||
traits_type::assign(*__p, *__k1); // These types are off.
|
||||
|
@ -2901,7 +2900,6 @@ _GLIBCXX_END_NAMESPACE_CXX11
|
|||
template<class _Iterator>
|
||||
static void
|
||||
_S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2)
|
||||
_GLIBCXX_NOEXCEPT
|
||||
{
|
||||
for (; __k1 != __k2; ++__k1, (void)++__p)
|
||||
traits_type::assign(*__p, *__k1); // These types are off.
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
// Copyright (C) 2016 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-options "-std=gnu++11" }
|
||||
|
||||
// PR libstdc++/69092
|
||||
|
||||
#include <string>
|
||||
#include <iterator>
|
||||
|
||||
struct hate_T_iterator : std::iterator<std::forward_iterator_tag, char> {
|
||||
explicit hate_T_iterator(char* p) : p(p) {}
|
||||
char* p;
|
||||
|
||||
hate_T_iterator& operator++() { ++p; return *this; }
|
||||
|
||||
hate_T_iterator operator++(int)
|
||||
{
|
||||
hate_T_iterator r = *this;
|
||||
++*this; return r;
|
||||
}
|
||||
|
||||
char& operator*() const
|
||||
{
|
||||
if (*p == 'T')
|
||||
throw 1;
|
||||
return *p;
|
||||
}
|
||||
|
||||
char* operator->() const { return p; }
|
||||
|
||||
bool operator== (hate_T_iterator other) const { return p == other.p;}
|
||||
bool operator!= (hate_T_iterator other) const { return p != other.p;}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
char test_str[4] = "ATA";
|
||||
try {
|
||||
std::string s(hate_T_iterator(test_str), hate_T_iterator(test_str+3));
|
||||
}
|
||||
catch(int) {
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue