|
38 | 38 | DEMANGLE_NAMESPACE_BEGIN |
39 | 39 |
|
40 | 40 | template <class T, size_t N> class PODSmallVector { |
41 | | - static_assert(std::is_trivial<T>::value, |
42 | | - "T is required to be a trivial type"); |
| 41 | + static_assert(std::is_trivially_copyable<T>::value, |
| 42 | + "T is required to be a trivially copyable type"); |
| 43 | + static_assert(std::is_trivially_default_constructible<T>::value, |
| 44 | + "T is required to be trivially default constructible"); |
43 | 45 | T *First = nullptr; |
44 | 46 | T *Last = nullptr; |
45 | 47 | T *Cap = nullptr; |
@@ -5739,14 +5741,16 @@ struct FloatData<double> |
5739 | 5741 | template <> |
5740 | 5742 | struct FloatData<long double> |
5741 | 5743 | { |
5742 | | -#if defined(__mips__) && defined(__mips_n64) || defined(__aarch64__) || \ |
5743 | | - defined(__wasm__) || defined(__riscv) || defined(__loongarch__) || \ |
5744 | | - defined(__ve__) |
5745 | | - static const size_t mangled_size = 32; |
5746 | | -#elif defined(__arm__) || defined(__mips__) || defined(__hexagon__) |
5747 | | - static const size_t mangled_size = 16; |
| 5744 | +#if __LDBL_MANT_DIG__ == 113 || __LDBL_MANT_DIG__ == 106 |
| 5745 | + static const size_t mangled_size = 32; |
| 5746 | +#elif __LDBL_MANT_DIG__ == 53 || defined(_MSC_VER) |
| 5747 | + // MSVC doesn't define __LDBL_MANT_DIG__, but it has long double equal to |
| 5748 | + // regular double on all current architectures. |
| 5749 | + static const size_t mangled_size = 16; |
| 5750 | +#elif __LDBL_MANT_DIG__ == 64 |
| 5751 | + static const size_t mangled_size = 20; |
5748 | 5752 | #else |
5749 | | - static const size_t mangled_size = 20; // May need to be adjusted to 16 or 24 on other platforms |
| 5753 | +#error Unknown size for __LDBL_MANT_DIG__ |
5750 | 5754 | #endif |
5751 | 5755 | // `-0x1.ffffffffffffffffffffffffffffp+16383` + 'L' + '\0' == 42 bytes. |
5752 | 5756 | // 28 'f's * 4 bits == 112 bits, which is the number of mantissa bits. |
|
0 commit comments