@@ -749,40 +749,31 @@ struct __can_be_converted_to_string_view
749
749
struct __uninitialized_size_tag {};
750
750
struct __init_with_sentinel_tag {};
751
751
752
- #ifdef _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT
752
+ template <size_t _PaddingSize>
753
+ struct __padding {
754
+ char __padding_[_PaddingSize];
755
+ };
756
+
757
+ template <>
758
+ struct __padding <0 > {};
759
+
753
760
template <class _CharT , size_t __min_cap, size_t _Padding = sizeof (_CharT) - 1 >
754
761
struct __short_layout_alternate {
755
762
_CharT __data_[__min_cap];
756
- unsigned char __padding_[_Padding] ;
763
+ _LIBCPP_NO_UNIQUE_ADDRESS __padding<_Padding> __padding_;
757
764
unsigned char __size_ : 7 ;
758
765
unsigned char __is_long_ : 1 ;
759
766
};
760
767
761
- template <class _CharT , size_t __min_cap>
762
- struct __short_layout_alternate <_CharT, __min_cap, 0 > {
763
- _CharT __data_[__min_cap];
764
- unsigned char __size_ : 7 ;
765
- unsigned char __is_long_ : 1 ;
766
- };
767
- #else
768
768
template <class _CharT , size_t __min_cap, size_t _Padding = sizeof (_CharT) - 1 >
769
769
struct __short_layout_classic {
770
770
struct _LIBCPP_PACKED {
771
771
unsigned char __is_long_ : 1 ;
772
772
unsigned char __size_ : 7 ;
773
773
};
774
- char __padding_[_Padding];
775
- _CharT __data_[__min_cap];
776
- };
777
- template <class _CharT , size_t __min_cap>
778
- struct __short_layout_classic <_CharT, __min_cap, 0 > {
779
- struct _LIBCPP_PACKED {
780
- unsigned char __is_long_ : 1 ;
781
- unsigned char __size_ : 7 ;
782
- };
774
+ _LIBCPP_NO_UNIQUE_ADDRESS __padding<_Padding> __padding_;
783
775
_CharT __data_[__min_cap];
784
776
};
785
- #endif
786
777
787
778
template <class _CharT , class _Traits , class _Allocator >
788
779
class basic_string {
0 commit comments