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.