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

            Bug ID: 121926
           Summary: generate_canonical fails for std::float16_t and
                    std::float128_t
           Product: gcc
           Version: 15.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: cassio.neri at gmail dot com
  Target Milestone: ---

1) generate_canonical<std::float16_t> yields NAN:

  int main() {
    auto constexpr bits = std::numeric_limits<std::float16_t>::digits;
    auto device = std::mt19937_64{};
    std::cout << generate_canonical<std::float16_t, bits>(device) << '\n';
  }

https://godbolt.org/z/zc9K4qeGT

2) generate_canonical<std::float128_t> fails to compile on powerpc*
(long double==IBM128):

  void f() {
    auto constexpr bits = std::numeric_limits<std::float128_t>::digits;
    auto device = std::mt19937_64{};
    (void) generate_canonical<std::float128_t, bits>(device);
  }

yields: error: invalid operands to binary * (have '_Float128' and 'long
double')
 3368 |           __tmp *= __r;
      |           ~~~~~~^~~~~~

https://godbolt.org/z/nbef796na

A patch is under way.

Reply via email to