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: r148751
This commit is contained in:
Paolo Carlini 2009-06-20 22:27:04 +00:00 committed by Paolo Carlini
parent cb7a89619d
commit 2271f9c260
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-19 Paolo Carlini <paolo.carlini@oracle.com> 2009-06-19 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/random.h (_Adaptor): Simplify for _DInputType always * include/bits/random.h (_Adaptor): Simplify for _DInputType always

View File

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