mirror of git://gcc.gnu.org/git/gcc.git
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: r232282
This commit is contained in:
parent
5b41cafb34
commit
606d9e7a07
|
|
@ -1,5 +1,10 @@
|
|||
2016-01-12 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.
|
||||
|
||||
PR libstdc++/68995
|
||||
* include/std/functional (_Function_handler::_M_invoke): Qualify
|
||||
__callable_functor.
|
||||
|
|
|
|||
|
|
@ -322,7 +322,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, ++__p)
|
||||
traits_type::assign(*__p, *__k1); // These types are off.
|
||||
|
|
@ -2782,7 +2781,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, ++__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…
Reference in New Issue