libstdc++: Make std::println use locale from ostream (LWG 4088)
This was just approved in Wrocław. libstdc++-v3/ChangeLog: * include/std/ostream (println): Pass stream's locale to std::format, as per LWG 4088. * testsuite/27_io/basic_ostream/print/1.cc: Check std::println with custom locale. Remove unused brit_punc class.
This commit is contained in:
parent
e76df35864
commit
1fd7e36e99
2 changed files with 13 additions and 11 deletions
|
@ -1028,8 +1028,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
inline void
|
||||
println(ostream& __os, format_string<_Args...> __fmt, _Args&&... __args)
|
||||
{
|
||||
std::print(__os, "{}\n",
|
||||
std::format(__fmt, std::forward<_Args>(__args)...));
|
||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
// 4088. println ignores the locale imbued in std::ostream
|
||||
std::print(__os, "{}\n", std::format(__os.getloc(), __fmt,
|
||||
std::forward<_Args>(__args)...));
|
||||
}
|
||||
|
||||
// Defined for C++26, supported as an extension to C++23.
|
||||
|
|
|
@ -63,14 +63,6 @@ test_vprint_nonunicode()
|
|||
// { dg-output "garbage in . garbage out" }
|
||||
}
|
||||
|
||||
struct brit_punc : std::numpunct<char>
|
||||
{
|
||||
std::string do_grouping() const override { return "\3\3"; }
|
||||
char do_thousands_sep() const override { return ','; }
|
||||
std::string do_truename() const override { return "yes mate"; }
|
||||
std::string do_falsename() const override { return "nah bruv"; }
|
||||
};
|
||||
|
||||
void
|
||||
test_locale()
|
||||
{
|
||||
|
@ -82,7 +74,7 @@ test_locale()
|
|||
|
||||
// The default C locale.
|
||||
std::locale cloc = std::locale::classic();
|
||||
// A custom locale using comma digit separators.
|
||||
// A custom locale using tilde digit separators.
|
||||
std::locale bloc(cloc, new stream_punc);
|
||||
|
||||
{
|
||||
|
@ -101,6 +93,14 @@ test_locale()
|
|||
std::print(os, "{:L} {}", 12345, 6789);
|
||||
VERIFY(os.str() == "1~23~45 6789");
|
||||
}
|
||||
|
||||
{
|
||||
// LWG 4088. println ignores the locale imbued in std::ostream
|
||||
std::ostringstream os;
|
||||
os.imbue(bloc);
|
||||
std::println(os, "{:L} {}", 12345, 6789);
|
||||
VERIFY(os.str() == "1~23~45 6789\n");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Add table
Reference in a new issue