re PR libstdc++/40497 ([C++0x] troubles with std::next / std::prev declarations)

2009-06-20  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/40497
	* include/bits/stl_iterator_base_funcs.h (next, prev): Fix the
	signature per the current C++1x draft (N2857).
	* testsuite/24_iterators/operations/40497.cc: Add.

From-SVN: r148752
This commit is contained in:
Paolo Carlini 2009-06-20 22:27:21 +00:00 committed by Paolo Carlini
parent 2006a00405
commit 38a0c5939b
3 changed files with 52 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2009-06-20 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/40497
* include/bits/stl_iterator_base_funcs.h (next, prev): Fix the
signature per the current C++1x draft (N2857).
* testsuite/24_iterators/operations/40497.cc: Add.
2009-06-16 Jonathan Wakely <jwakely.gcc@gmail.com>
* libsupc++/exception_ptr.h (exception_ptr::swap(exception_ptr&&)):

View File

@ -175,8 +175,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<typename _InputIterator>
inline _InputIterator
next(_InputIterator __x, typename
iterator_traits<_InputIterator>::difference_type __n = 1)
next(_InputIterator __x,
typename _InputIterator::difference_type __n = 1)
{
std::advance(__x, __n);
return __x;
@ -184,8 +184,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _BidirectionalIterator>
inline _BidirectionalIterator
prev(_BidirectionalIterator __x, typename
iterator_traits<_BidirectionalIterator>::difference_type __n = 1)
prev(_BidirectionalIterator __x,
typename _BidirectionalIterator::difference_type __n = 1)
{
std::advance(__x, -__n);
return __x;

View File

@ -0,0 +1,41 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
// Copyright (C) 2009 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/>.
namespace X
{
class C { };
template<class T> void next(T) { }
template<class T> void prev(T) { }
}
using namespace X;
#include <string>
using namespace std;
// libstdc++/40497
void test01()
{
C c;
next(c);
prev(c);
}