PR libstdc++/58403
* include/bits/stl_iterator.h (__normal_iterator<>::operator[],
operator+=, operator+, operator-=, operator-): Take the argument
by value.
* testsuite/24_iterators/normal_iterator/58403.cc: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@202531
138bc75d-0d04-0410-961f-
82ee72b054a4
+2013-09-12 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/58403
+ * include/bits/stl_iterator.h (__normal_iterator<>::operator[],
+ operator+=, operator+, operator-=, operator-): Take the argument
+ by value.
+ * testsuite/24_iterators/normal_iterator/58403.cc: New.
+
2013-09-11 Mitsuru Kariya <kariya_mitsuru@hotmail.com>
Chris Jefferson <chris@bubblescope.net>
// Random access iterator requirements
reference
- operator[](const difference_type& __n) const
+ operator[](difference_type __n) const
{ return _M_current[__n]; }
__normal_iterator&
- operator+=(const difference_type& __n)
+ operator+=(difference_type __n)
{ _M_current += __n; return *this; }
__normal_iterator
- operator+(const difference_type& __n) const
+ operator+(difference_type __n) const
{ return __normal_iterator(_M_current + __n); }
__normal_iterator&
- operator-=(const difference_type& __n)
+ operator-=(difference_type __n)
{ _M_current -= __n; return *this; }
__normal_iterator
- operator-(const difference_type& __n) const
+ operator-(difference_type __n) const
{ return __normal_iterator(_M_current - __n); }
const _Iterator&
--- /dev/null
+// { dg-options "-std=gnu++11" }
+// { dg-do link }
+
+// Copyright (C) 2013 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/>.
+
+#include <string>
+#include <iterator>
+
+struct A {
+ static constexpr std::iterator_traits<
+ std::string::iterator>::difference_type a = 1;
+};
+
+int main()
+{
+ std::string s = "foo";
+ auto it = s.begin();
+ it += A::a;
+}