Implement LWG #2344: quoted()'s interaction with padding is unclear. I think that anyone using quoted with padding is really confused, but it should work the way the rest of iostreams works.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@203290 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
471f3c67db
commit
b90686c1ec
@ -519,15 +519,16 @@ std::basic_ostream<_CharT, _Traits> &
|
|||||||
__quoted_output ( basic_ostream<_CharT, _Traits> &__os,
|
__quoted_output ( basic_ostream<_CharT, _Traits> &__os,
|
||||||
_ForwardIterator __first, _ForwardIterator __last, _CharT __delim, _CharT __escape )
|
_ForwardIterator __first, _ForwardIterator __last, _CharT __delim, _CharT __escape )
|
||||||
{
|
{
|
||||||
__os << __delim;
|
_VSTD::basic_string<_CharT, _Traits> __str;
|
||||||
|
__str.push_back(__delim);
|
||||||
for ( ; __first != __last; ++ __first )
|
for ( ; __first != __last; ++ __first )
|
||||||
{
|
{
|
||||||
if (_Traits::eq (*__first, __escape) || _Traits::eq (*__first, __delim))
|
if (_Traits::eq (*__first, __escape) || _Traits::eq (*__first, __delim))
|
||||||
__os << __escape;
|
__str.push_back(__escape);
|
||||||
__os << *__first;
|
__str.push_back(*__first);
|
||||||
}
|
}
|
||||||
__os << __delim;
|
__str.push_back(__delim);
|
||||||
return __os;
|
return __put_character_sequence(__os, __str.data(), __str.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _CharT, class _Traits, class _String>
|
template <class _CharT, class _Traits, class _String>
|
||||||
|
@ -28,13 +28,13 @@ bool is_skipws ( const std::wistream *is ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void both_ways ( const char *p ) {
|
void both_ways ( const char *p ) {
|
||||||
std::string str(p);
|
std::string str(p);
|
||||||
auto q = std::quoted(str);
|
auto q = std::quoted(str);
|
||||||
|
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
bool skippingws = is_skipws ( &ss );
|
bool skippingws = is_skipws ( &ss );
|
||||||
ss << q;
|
ss << q;
|
||||||
ss >> q;
|
ss >> q;
|
||||||
}
|
}
|
||||||
|
|
||||||
void round_trip ( const char *p ) {
|
void round_trip ( const char *p ) {
|
||||||
@ -92,6 +92,20 @@ std::string unquote ( const char *p, char delim='"', char escape='\\' ) {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_padding () {
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << std::left << std::setw(10) << std::setfill('!') << std::quoted("abc", '`');
|
||||||
|
assert ( ss.str() == "`abc`!!!!!" );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << std::right << std::setw(10) << std::setfill('!') << std::quoted("abc", '`');
|
||||||
|
assert ( ss.str() == "!!!!!`abc`" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void round_trip ( const wchar_t *p ) {
|
void round_trip ( const wchar_t *p ) {
|
||||||
std::wstringstream ss;
|
std::wstringstream ss;
|
||||||
@ -197,6 +211,7 @@ int main()
|
|||||||
|
|
||||||
assert ( unquote ( "" ) == "" ); // nothing there
|
assert ( unquote ( "" ) == "" ); // nothing there
|
||||||
assert ( unquote ( L"" ) == L"" ); // nothing there
|
assert ( unquote ( L"" ) == L"" ); // nothing there
|
||||||
|
test_padding ();
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user