Commit 71234632 by Paolo Carlini Committed by Paolo Carlini

re PR libstdc++/44963 ([DR 1334] Ambiguous function overload using…

re PR libstdc++/44963 ([DR 1334] Ambiguous function overload using __gnu_cxx::crope with std::back_inserter in c++0x mode)

2010-08-08  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/44963
	* include/bits/stl_iterator.h (insert_iterator<>::
	operator=(const typename _Container::value_type&,
	back_insert_iterator<>::
	operator=(const typename _Container::value_type&),
	front_insert_iterator<>::
	operator=(const typename _Container::value_type&))): Add
	in C++0x mode.
	* testsuite/ext/rope/44963.cc: New.
	* testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust
	dg-error line number.

From-SVN: r163001
parent 07f93cbd
2010-08-08 Paolo Carlini <paolo.carlini@oracle.com> 2010-08-08 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/44963
* include/bits/stl_iterator.h (insert_iterator<>::
operator=(const typename _Container::value_type&,
back_insert_iterator<>::
operator=(const typename _Container::value_type&),
front_insert_iterator<>::
operator=(const typename _Container::value_type&))): Add
in C++0x mode.
* testsuite/ext/rope/44963.cc: New.
* testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust
dg-error line number.
2010-08-08 Paolo Carlini <paolo.carlini@oracle.com>
* include/c_global/cmath: Implement US 136. * include/c_global/cmath: Implement US 136.
* include/tr1_impl/cmath: Do not bring fpclassify, etc from namespace * include/tr1_impl/cmath: Do not bring fpclassify, etc from namespace
std, define namespace tr1. std, define namespace tr1.
......
...@@ -416,14 +416,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -416,14 +416,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* the end, if you like). Assigning a value to the %iterator will * the end, if you like). Assigning a value to the %iterator will
* always append the value to the end of the container. * always append the value to the end of the container.
*/ */
#ifndef __GXX_EXPERIMENTAL_CXX0X__
back_insert_iterator& back_insert_iterator&
operator=(typename _Container::const_reference __value) operator=(typename _Container::const_reference __value)
{ {
container->push_back(__value); container->push_back(__value);
return *this; return *this;
} }
#else
back_insert_iterator&
operator=(const typename _Container::value_type& __value)
{
container->push_back(__value);
return *this;
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
back_insert_iterator& back_insert_iterator&
operator=(typename _Container::value_type&& __value) operator=(typename _Container::value_type&& __value)
{ {
...@@ -499,14 +506,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -499,14 +506,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* the front, if you like). Assigning a value to the %iterator will * the front, if you like). Assigning a value to the %iterator will
* always prepend the value to the front of the container. * always prepend the value to the front of the container.
*/ */
#ifndef __GXX_EXPERIMENTAL_CXX0X__
front_insert_iterator& front_insert_iterator&
operator=(typename _Container::const_reference __value) operator=(typename _Container::const_reference __value)
{ {
container->push_front(__value); container->push_front(__value);
return *this; return *this;
} }
#else
front_insert_iterator&
operator=(const typename _Container::value_type& __value)
{
container->push_front(__value);
return *this;
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
front_insert_iterator& front_insert_iterator&
operator=(typename _Container::value_type&& __value) operator=(typename _Container::value_type&& __value)
{ {
...@@ -603,6 +617,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -603,6 +617,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* // vector v contains A, 1, 2, 3, and Z * // vector v contains A, 1, 2, 3, and Z
* @endcode * @endcode
*/ */
#ifndef __GXX_EXPERIMENTAL_CXX0X__
insert_iterator& insert_iterator&
operator=(typename _Container::const_reference __value) operator=(typename _Container::const_reference __value)
{ {
...@@ -610,8 +625,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -610,8 +625,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
++iter; ++iter;
return *this; return *this;
} }
#else
insert_iterator&
operator=(const typename _Container::value_type& __value)
{
iter = container->insert(iter, __value);
++iter;
return *this;
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
insert_iterator& insert_iterator&
operator=(typename _Container::value_type&& __value) operator=(typename _Container::value_type&& __value)
{ {
......
...@@ -45,7 +45,7 @@ main() ...@@ -45,7 +45,7 @@ main()
// { dg-warning "note" "" { target *-*-* } 423 } // { dg-warning "note" "" { target *-*-* } 423 }
// { dg-warning "note" "" { target *-*-* } 862 } // { dg-warning "note" "" { target *-*-* } 862 }
// { dg-warning "note" "" { target *-*-* } 510 } // { dg-warning "note" "" { target *-*-* } 510 }
// { dg-warning "note" "" { target *-*-* } 1005 } // { dg-warning "note" "" { target *-*-* } 1027 }
// { dg-warning "note" "" { target *-*-* } 340 } // { dg-warning "note" "" { target *-*-* } 340 }
// { dg-warning "note" "" { target *-*-* } 290 } // { dg-warning "note" "" { target *-*-* } 290 }
// { dg-warning "note" "" { target *-*-* } 197 } // { dg-warning "note" "" { target *-*-* } 197 }
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
// Copyright (C) 2010 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 <ext/rope>
// libstdc++/44963
void test01()
{
__gnu_cxx::crope line("test");
auto ii(std::back_inserter(line));
*ii++ = 'm';
*ii++ = 'e';
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment