Commit f0fd118f by Jonathan Wakely Committed by Jonathan Wakely

re PR libstdc++/57394 ([C++11] basic_streambuf incorrect copy constructor / copy…

re PR libstdc++/57394 ([C++11] basic_streambuf incorrect copy constructor / copy assignment access specifier)

	PR libstdc++/57394
	* include/bits/ios_base.h (ios_base(const ios_base&)): Define as
	deleted for C++11.
	(operator=(const ios_base&)): Likewise.
	* include/std/streambuf: Remove trailing whitespace.
	(basic_streambuf(const basic_streambuf&)): Fix initializer for
	_M_out_end. Define as defaulted for C++11.
	(operator=(const basic_streambuf&)): Define as defaulted for C++11.
	(swap(basic_streambuf&)): Define for C++11.
	* testsuite/27_io/basic_streambuf/cons/57394.cc: New.

From-SVN: r210228
parent 8a8d1a16
2014-05-08 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/57394
* include/bits/ios_base.h (ios_base(const ios_base&)): Define as
deleted for C++11.
(operator=(const ios_base&)): Likewise.
* include/std/streambuf: Remove trailing whitespace.
(basic_streambuf(const basic_streambuf&)): Fix initializer for
_M_out_end. Define as defaulted for C++11.
(operator=(const basic_streambuf&)): Define as defaulted for C++11.
(swap(basic_streambuf&)): Define for C++11.
* testsuite/27_io/basic_streambuf/cons/57394.cc: New.
2014-05-08 Paolo Carlini <paolo.carlini@oracle.com>
* acinclude.m4 ([GLIBCXX_ENABLE_C99]): Avoid -Wwrite-strings warning.
......
......@@ -780,6 +780,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
protected:
ios_base() throw ();
#if __cplusplus < 201103L
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 50. Copy constructor and assignment operator of ios_base
private:
......@@ -787,6 +788,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
ios_base&
operator=(const ios_base&);
#else
public:
ios_base(const ios_base&) = delete;
ios_base&
operator=(const ios_base&) = delete;
#endif
};
// [27.4.5.1] fmtflags manipulators
......
// Copyright (C) 2014 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" }
// { dg-require-namedlocale "de_DE" }
// 27.6.3 template class basic_streambuf
#include <streambuf>
#include <testsuite_hooks.h>
struct streambuf : std::streambuf
{
streambuf()
{
setp(pbuf, std::end(pbuf));
setg(gbuf, gbuf, gbuf);
}
streambuf(const std::locale& loc) : streambuf()
{
imbue(loc);
}
// implement tests as member functions to be able to call protected members
void test_copy() const;
void test_assign() const;
void test_swap() const;
char gbuf[32];
char pbuf[32];
};
void streambuf::test_copy() const
{
bool test __attribute__((unused)) = true;
streambuf a(*this);
VERIFY( eback() == a.eback() );
VERIFY( gptr() == a.gptr() );
VERIFY( egptr() == a.egptr() );
VERIFY( pbase() == a.pbase() );
VERIFY( pptr() == a.pptr() );
VERIFY( epptr() == a.epptr() );
VERIFY( getloc() == a.getloc() );
}
void streambuf::test_assign() const
{
bool test __attribute__((unused)) = true;
streambuf a;
a = *this;
VERIFY( eback() == a.eback() );
VERIFY( gptr() == a.gptr() );
VERIFY( egptr() == a.egptr() );
VERIFY( pbase() == a.pbase() );
VERIFY( pptr() == a.pptr() );
VERIFY( epptr() == a.epptr() );
VERIFY( getloc() == a.getloc() );
}
void streambuf::test_swap() const
{
bool test __attribute__((unused)) = true;
streambuf a(*this);
streambuf b;
const streambuf c(b);
a.swap(b);
VERIFY( eback() == b.eback() );
VERIFY( gptr() == b.gptr() );
VERIFY( egptr() == b.egptr() );
VERIFY( pbase() == b.pbase() );
VERIFY( pptr() == b.pptr() );
VERIFY( epptr() == b.epptr() );
VERIFY( getloc() == b.getloc() );
VERIFY( c.eback() == a.eback() );
VERIFY( c.gptr() == a.gptr() );
VERIFY( c.egptr() == a.egptr() );
VERIFY( c.pbase() == a.pbase() );
VERIFY( c.pptr() == a.pptr() );
VERIFY( c.epptr() == a.epptr() );
VERIFY( c.getloc() == a.getloc() );
}
int main()
{
std::locale loc("de_DE");
streambuf s(loc);
s.test_copy();
s.test_assign();
s.test_swap();
}
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