qfloat16: make native std::numeric_limits<qfloat16> constexpr
In C++23 with std::float16_t present (QFLOAT16_IS_NATIVE), the
_limit_xxxx() methods in qfloat16 need to set the native type, not rely
on the union trick because that isn't allowed in constexpr mode.
in ‘constexpr’ expansion of ‘operator<=>(Max, std::numeric_limits<double>::max())’
qfloat16.h:209:5: in ‘constexpr’ expansion of ‘compareThreeWay((* & lhs), ((double)rhs))’
qfloat16.h:209:5: in ‘constexpr’ expansion of ‘(& lhs)->qfloat16::operator NativeType()’
error: accessing ‘qfloat16::<unnamed union>::nf’ member instead of initialized ‘qfloat16::<unnamed union>::b16’ member in constant expression
Pick-to: 6.7
Change-Id: I01ec3c774d9943adb903fffd17b8b6ceed6ef9e2
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
bb10
parent
89fc58127d
commit
48cd686757
|
|
@ -118,7 +118,13 @@ private:
|
|||
NativeType nf;
|
||||
#endif
|
||||
};
|
||||
constexpr inline explicit qfloat16(Wrap nibble) noexcept : b16(nibble.b16) {}
|
||||
constexpr inline explicit qfloat16(Wrap nibble) noexcept :
|
||||
#if QFLOAT16_IS_NATIVE && defined(__cpp_lib_bit_cast)
|
||||
nf(std::bit_cast<NativeType>(nibble.b16))
|
||||
#else
|
||||
b16(nibble.b16)
|
||||
#endif
|
||||
{}
|
||||
|
||||
Q_CORE_EXPORT static const quint32 mantissatable[];
|
||||
Q_CORE_EXPORT static const quint32 exponenttable[];
|
||||
|
|
|
|||
Loading…
Reference in New Issue