* [committed] libstdc++: Workaround for missing 'using enum' in Clang 12
@ 2022-03-29 9:11 Jonathan Wakely
0 siblings, 0 replies; only message in thread
From: Jonathan Wakely @ 2022-03-29 9:11 UTC (permalink / raw)
To: libstdc++, gcc-patches
Tested powerpc64le-linux, pushed to trunk.
-- >8 --
Once we no longer care about older compilers without this feature, we
can drop these static data members, so the names don't have to be
visible at class scope.
libstdc++-v3/ChangeLog:
* libsupc++/compare (_Strong_order) [!__cpp_using_enum]: Add
static data members for _Fp_fmt enumerators.
---
libstdc++-v3/libsupc++/compare | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/libstdc++-v3/libsupc++/compare b/libstdc++-v3/libsupc++/compare
index 6e1ed53eeed..e9cf9139def 100644
--- a/libstdc++-v3/libsupc++/compare
+++ b/libstdc++-v3/libsupc++/compare
@@ -677,12 +677,25 @@ namespace std
// TODO: _Bfloat16,
};
+#ifndef __cpp_using_enum
+ // XXX Remove these once 'using enum' support is ubiquitous.
+ static constexpr _Fp_fmt _Binary16 = _Fp_fmt::_Binary16;
+ static constexpr _Fp_fmt _Binary32 = _Fp_fmt::_Binary32;
+ static constexpr _Fp_fmt _Binary64 = _Fp_fmt::_Binary64;
+ static constexpr _Fp_fmt _Binary128 = _Fp_fmt::_Binary128;
+ static constexpr _Fp_fmt _X86_80bit = _Fp_fmt::_X86_80bit;
+ static constexpr _Fp_fmt _M68k_80bit = _Fp_fmt::_M68k_80bit;
+ static constexpr _Fp_fmt _Dbldbl = _Fp_fmt::_Dbldbl;
+#endif
+
// Identify the format used by a floating-point type.
template<typename _Tp>
static consteval _Fp_fmt
_S_fp_fmt() noexcept
{
+#ifdef __cpp_using_enum
using enum _Fp_fmt;
+#endif
// Identify these formats first, then assume anything else is IEEE.
// N.B. ARM __fp16 alternative format can be handled as binary16.
@@ -810,7 +823,9 @@ namespace std
return __builtin_bit_cast(int16_t, __val);
else
{
+#ifdef __cpp_using_enum
using enum _Fp_fmt;
+#endif
constexpr auto __fmt = _S_fp_fmt<_Tp>();
if constexpr (__fmt == _X86_80bit || __fmt == _M68k_80bit)
{
@@ -862,7 +877,9 @@ namespace std
if (__ix == __iy)
return strong_ordering::equal; // All bits are equal, we're done.
+#ifdef __cpp_using_enum
using enum _Fp_fmt;
+#endif
constexpr auto __fmt = _S_fp_fmt<_Tp>();
if constexpr (__fmt == _Dbldbl) // double-double
--
2.34.1
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-03-29 9:12 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-29 9:11 [committed] libstdc++: Workaround for missing 'using enum' in Clang 12 Jonathan Wakely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).