[Bug libstdc++/100912] powerpc64le: ieee128 long double incorrectly printed when using shared libstdc++

qiu.chaofan at outlook dot com gcc-bugzilla@gcc.gnu.org
Mon Dec 6 06:26:02 GMT 2021


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100912

--- Comment #9 from Qiu Chaofan <qiu.chaofan at outlook dot com> ---
I also get following 'symbol not found' error for following case (under
-mabi=ieeelongdouble): undefined reference to
`std::__gnu_cxx11_ieee128::money_get<wchar_t, std::istreambuf_iterator<wchar_t,
std::char_traits<wchar_t> > >::money_get(unsigned long)'

Maybe related?

#include <iterator>
#include <locale>
#include <sstream>

struct D : public std::money_get<wchar_t> {
  D() : std::money_get<wchar_t>() {}
  iter_type do_get(iter_type s, iter_type end, bool intl, std::ios_base &str,
                   std::ios_base::iostate &err, long double &units) const {
    return std::money_get<wchar_t>::do_get(s, end, intl, str, err, units);
  }
} d;

int main(void) {
  std::wistringstream in(L"1 ");
  in.imbue(std::locale::classic());
  in.exceptions(std::ios_base::goodbit);

  long double val;
  std::istreambuf_iterator<wchar_t> end;
  std::istreambuf_iterator<wchar_t> begin(in);
  std::ios_base::iostate prior_err = in.rdstate();
  std::ios_base::iostate err = in.rdstate();
  d.do_get(begin, end, true, in, err, val);

  return 0;
}


More information about the Gcc-bugs mailing list