DR 2344 - std::quoted doesn't respect padding
2014-06-06 Ed Smith-Rowland <3dw4rd@verizon.net> DR 2344 - std::quoted doesn't respect padding * include/std/iomanip: Allow for padding in quoted inserters. * testsuite/27_io/manipulators/standard/char/dr2344.cc: New. * testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc: New. From-SVN: r211340
This commit is contained in:
parent
4307f07ffa
commit
25608e3a5f
4 changed files with 130 additions and 15 deletions
|
@ -1,3 +1,10 @@
|
|||
2014-06-06 Ed Smith-Rowland <3dw4rd@verizon.net>
|
||||
|
||||
DR 2344 - std::quoted doesn't respect padding
|
||||
* include/std/iomanip: Allow for padding in quoted inserters.
|
||||
* testsuite/27_io/manipulators/standard/char/dr2344.cc: New.
|
||||
* testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc: New.
|
||||
|
||||
2014-06-06 François Dumont <fdumont@gcc.gnu.org>
|
||||
|
||||
* testsuite/23_containers/map/operators/1.cc: Simplify test.
|
||||
|
|
|
@ -41,6 +41,9 @@
|
|||
|
||||
#if __cplusplus >= 201103L
|
||||
#include <locale>
|
||||
#if __cplusplus > 201103L
|
||||
#include <sstream> // used in quoted.
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace std _GLIBCXX_VISIBILITY(default)
|
||||
|
@ -342,7 +345,6 @@ _GLIBCXX_END_NAMESPACE_VERSION
|
|||
|
||||
/**
|
||||
* @brief Struct for delimited strings.
|
||||
* The left and right delimiters can be different.
|
||||
*/
|
||||
template<typename _String, typename _CharT>
|
||||
struct _Quoted_string
|
||||
|
@ -364,45 +366,51 @@ _GLIBCXX_END_NAMESPACE_VERSION
|
|||
};
|
||||
|
||||
/**
|
||||
* @brief Inserter for delimited strings.
|
||||
* The left and right delimiters can be different.
|
||||
* @brief Inserter for quoted strings.
|
||||
*
|
||||
* _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
* DR 2344 quoted()'s interaction with padding is unclear
|
||||
*/
|
||||
template<typename _CharT, typename _Traits>
|
||||
auto&
|
||||
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
|
||||
const _Quoted_string<const _CharT*, _CharT>& __str)
|
||||
{
|
||||
__os << __str._M_delim;
|
||||
std::basic_ostringstream<_CharT, _Traits> __ostr;
|
||||
__ostr << __str._M_delim;
|
||||
for (const _CharT* __c = __str._M_string; *__c; ++__c)
|
||||
{
|
||||
if (*__c == __str._M_delim || *__c == __str._M_escape)
|
||||
__os << __str._M_escape;
|
||||
__os << *__c;
|
||||
__ostr << __str._M_escape;
|
||||
__ostr << *__c;
|
||||
}
|
||||
__os << __str._M_delim;
|
||||
__ostr << __str._M_delim;
|
||||
|
||||
return __os;
|
||||
return __os << __ostr.str();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Inserter for delimited strings.
|
||||
* The left and right delimiters can be different.
|
||||
* @brief Inserter for quoted strings.
|
||||
*
|
||||
* _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
* DR 2344 quoted()'s interaction with padding is unclear
|
||||
*/
|
||||
template<typename _CharT, typename _Traits, typename _String>
|
||||
auto&
|
||||
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
|
||||
const _Quoted_string<_String, _CharT>& __str)
|
||||
{
|
||||
__os << __str._M_delim;
|
||||
std::basic_ostringstream<_CharT, _Traits> __ostr;
|
||||
__ostr << __str._M_delim;
|
||||
for (auto& __c : __str._M_string)
|
||||
{
|
||||
if (__c == __str._M_delim || __c == __str._M_escape)
|
||||
__os << __str._M_escape;
|
||||
__os << __c;
|
||||
__ostr << __str._M_escape;
|
||||
__ostr << __c;
|
||||
}
|
||||
__os << __str._M_delim;
|
||||
__ostr << __str._M_delim;
|
||||
|
||||
return __os;
|
||||
return __os << __ostr.str();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
// { dg-do run }
|
||||
// { dg-options "-std=gnu++14" }
|
||||
|
||||
// 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/>.
|
||||
|
||||
// 27.7.6 - Quoted manipulators [quoted.manip]
|
||||
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void
|
||||
test01()
|
||||
{
|
||||
bool test [[gnu::unused]] = true;
|
||||
|
||||
std::ostringstream ssx;
|
||||
ssx << "[" << std::left << std::setfill('x') << std::setw(20) << R"("AB \"CD\" EF")" << "]";
|
||||
VERIFY( ssx.str() == R"(["AB \"CD\" EF"xxxxxx])" );
|
||||
|
||||
std::ostringstream ssy;
|
||||
ssy << "[" << std::left << std::setfill('y') << std::setw(20) << std::quoted(R"(GH "IJ" KL)") << "]";
|
||||
VERIFY( ssy.str() == R"(["GH \"IJ\" KL"yyyyyy])" );
|
||||
|
||||
std::ostringstream ssz;
|
||||
ssz << "[" << std::right << std::setfill('z') << std::setw(20) << std::quoted(R"(PQ "RS" TU)") << "]";
|
||||
VERIFY( ssz.str() == R"([zzzzzz"PQ \"RS\" TU"])" );
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
// { dg-do run }
|
||||
// { dg-options "-std=gnu++14" }
|
||||
|
||||
// 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/>.
|
||||
|
||||
// 27.7.6 - Quoted manipulators [quoted.manip]
|
||||
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void
|
||||
test01()
|
||||
{
|
||||
bool test [[gnu::unused]] = true;
|
||||
|
||||
std::wostringstream ssx;
|
||||
ssx << L"[" << std::left << std::setfill(L'x') << std::setw(20) << LR"("AB \"CD\" EF")" << L"]";
|
||||
VERIFY( ssx.str() == LR"(["AB \"CD\" EF"xxxxxx])" );
|
||||
|
||||
std::wostringstream ssy;
|
||||
ssy << L"[" << std::left << std::setfill(L'y') << std::setw(20) << std::quoted(LR"(GH "IJ" KL)") << L"]";
|
||||
VERIFY( ssy.str() == LR"(["GH \"IJ\" KL"yyyyyy])" );
|
||||
|
||||
std::wostringstream ssz;
|
||||
ssz << L"[" << std::right << std::setfill(L'z') << std::setw(20) << std::quoted(LR"(PQ "RS" TU)") << L"]";
|
||||
VERIFY( ssz.str() == LR"([zzzzzz"PQ \"RS\" TU"])" );
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue