public inbox for libstdc++@gcc.gnu.org
 help / color / mirror / Atom feed
* [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).