diff options
author | emsr <emsr@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-06-07 03:40:30 +0000 |
---|---|---|
committer | emsr <emsr@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-06-07 03:40:30 +0000 |
commit | 3a99d0de3ffe1b56e2e55a30ae82e564ba29abdf (patch) | |
tree | 6df4ad2cc2d60c12198e2fd0cc6d7ff44da44663 /libstdc++-v3/include | |
parent | 02dd7efc7b20f86eb752ef2eaddbc5f03ce18288 (diff) | |
download | gcc-3a99d0de3ffe1b56e2e55a30ae82e564ba29abdf.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@211340 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include')
-rw-r--r-- | libstdc++-v3/include/std/iomanip | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/libstdc++-v3/include/std/iomanip b/libstdc++-v3/include/std/iomanip index 73822db9b20..cc6f60cdeeb 100644 --- a/libstdc++-v3/include/std/iomanip +++ b/libstdc++-v3/include/std/iomanip @@ -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(); } /** |