Skip to content

Commit f79d7a9

Browse files
committed
Gate std::float128_t support
It seems the type can exist without any library support, which is no good. * ra/ra.hh (RA_FLOAT128): New #define. * test/types.cc: Reuse RA_FLOAT128.
1 parent a6c42fe commit f79d7a9

File tree

3 files changed

+9
-7
lines changed

3 files changed

+9
-7
lines changed

ra/ra.hh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ template <class T> constexpr void cast(ra::noarg);
3232
// Scalar overloads.
3333
// ---------------------------
3434

35-
#if defined(__STDCPP_FLOAT128_T__)
35+
#define RA_FLOAT128 (1==__STDCPP_FLOAT128_T__ && defined(_GLIBCXX_HAVE_FLOAT128_MATH))
36+
#if RA_FLOAT128
3637
#include <stdfloat>
3738
#define RA_FLOATS float, double, std::float128_t
3839
#define RA_OP_QUAD_DOUBLE(OP, R, C) \
@@ -46,7 +47,7 @@ RA_FE(RA_QUAD_DOUBLE, +, -, /, *)
4647
#undef RA_OP_QUAD_DOUBLE_OP
4748
#else
4849
#define RA_FLOATS float, double
49-
#endif
50+
#endif // RA_FLOAT128
5051

5152
// abs() works for ra:: types through ADL, should work on pods. std::max/min are special, see RA_NAME. FIXME let user decide?
5253
using std::max, std::min, std::abs, std::fma, std::sqrt, std::pow, std::exp, std::swap,

test/cellrank.cc

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88
// later version.
99

1010
#include "ra/test.hh"
11-
#ifdef __STDCPP_FLOAT128_T__
12-
#include <stdfloat>
13-
#endif
1411

1512
using std::cout, std::endl, std::flush, ra::TestRecorder;
1613

test/types.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,12 @@ int main()
8787
false, false, false, true, false);
8888
TESTPRED(std::complex<double>,
8989
false, false, false, true, false);
90-
#ifdef __STDCPP_FLOAT128_T__
90+
#if RA_FLOAT128
9191
TESTPRED(std::float128_t,
9292
false, false, false, true, false);
9393
TESTPRED(std::complex<std::float128_t>,
9494
false, false, false, true, false);
95-
#endif // __STDCPP_FLOAT128_T__
95+
#endif // RA_FLOAT128
9696
TESTPRED(decltype(std::declval<ra::Unique<int, 2>>()),
9797
true, true, false, false, false);
9898
TESTPRED(decltype(std::declval<ra::Unique<int, 2>>()) const,
@@ -242,8 +242,12 @@ int main()
242242
}
243243
tr.section("mixed float128/double ops");
244244
{
245+
#if RA_FLOAT128
245246
tr.test_eq(9., real(std::complex<std::float128_t>(3.) * 3.));
246247
tr.test_eq(9., real(std::complex<double>(3.) * std::float128_t(3.)));
248+
#else
249+
std::println(std::cout, "no float128_t support!");
250+
#endif // RA_FLOAT128
247251
}
248252
return tr.summary();
249253
}

0 commit comments

Comments
 (0)