mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-28 02:37:37 +00:00
[libc++] Fix ostream for complex numbers with fixed field width
The ostream operator<< is currently broken for std::complex with
specified field widths.
This patch a partial revert of c3478eff7a
(reviewed as D71214),
restoring the correct behavior.
Differential Revision: https://reviews.llvm.org/D78816
This commit is contained in:
parent
4356aa20bc
commit
aa0b991dcf
@ -244,6 +244,7 @@ template<class T, class charT, class traits>
|
||||
#include <stdexcept>
|
||||
#include <cmath>
|
||||
#include <iosfwd>
|
||||
#include <sstream>
|
||||
#include <version>
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
@ -1441,7 +1442,12 @@ template<class _Tp, class _CharT, class _Traits>
|
||||
basic_ostream<_CharT, _Traits>&
|
||||
operator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __x)
|
||||
{
|
||||
return __os << '(' << __x.real() << ',' << __x.imag() << ')';
|
||||
basic_ostringstream<_CharT, _Traits> __s;
|
||||
__s.flags(__os.flags());
|
||||
__s.imbue(__os.getloc());
|
||||
__s.precision(__os.precision());
|
||||
__s << '(' << __x.real() << ',' << __x.imag() << ')';
|
||||
return __os << __s.str();
|
||||
}
|
||||
|
||||
#if _LIBCPP_STD_VER > 11
|
||||
|
@ -20,10 +20,20 @@
|
||||
|
||||
int main(int, char**)
|
||||
{
|
||||
std::complex<double> c(1, 2);
|
||||
std::ostringstream os;
|
||||
os << c;
|
||||
assert(os.str() == "(1,2)");
|
||||
{
|
||||
std::complex<double> c(1, 2);
|
||||
std::ostringstream os;
|
||||
os << c;
|
||||
assert(os.str() == "(1,2)");
|
||||
}
|
||||
{
|
||||
std::complex<double> c(1, 2);
|
||||
std::ostringstream os;
|
||||
os.width(8);
|
||||
os.fill('_');
|
||||
os << c;
|
||||
assert(os.str() == "___(1,2)");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user