55#include < type_traits>
66#include < optional>
77
8+ #if defined(_MSC_VER)
9+ #define NO_UNIQUE_ADDRESS [[msvc::no_unique_address]]
10+ #else
11+ #define NO_UNIQUE_ADDRESS [[no_unique_address]]
12+ #endif
13+
814class MyClass {
915public:
1016 const int const_member = 23 ;
@@ -17,19 +23,19 @@ struct Empty {
1723
1824struct HasZeroSizedField {
1925 int a;
20- [[no_unique_address]] Empty b;
26+ NO_UNIQUE_ADDRESS Empty b;
2127 short c;
22- [[no_unique_address]] Empty d;
28+ NO_UNIQUE_ADDRESS Empty d;
2329 int * e;
24- [[no_unique_address]] Empty f;
30+ NO_UNIQUE_ADDRESS Empty f;
2531
2632 int get_a () const { return a; }
2733 short get_c () const { return c; }
2834 void set_c (short c) { this ->c = c; }
2935};
3036
3137struct ReuseOptionalFieldPadding {
32- [[no_unique_address]] std::optional<int > a = {2 };
38+ NO_UNIQUE_ADDRESS std::optional<int > a = {2 };
3339 char c;
3440 char get_c () const { return c; }
3541 void set_c (char c) { this ->c = c; }
@@ -40,7 +46,7 @@ struct ReuseOptionalFieldPadding {
4046using OptInt = std::optional<int >;
4147
4248struct ReuseOptionalFieldPaddingWithTypedef {
43- [[no_unique_address]] OptInt a;
49+ NO_UNIQUE_ADDRESS OptInt a;
4450 char c;
4551 char get_c () const { return c; }
4652 void set_c (char c) { this ->c = c; }
@@ -59,7 +65,7 @@ struct NonStandardLayoutClass {
5965static_assert (std::is_standard_layout_v<NonStandardLayoutClass<int >> == false );
6066
6167struct ReuseNonStandardLayoutFieldPadding {
62- [[no_unique_address]] NonStandardLayoutClass<int > a;
68+ NO_UNIQUE_ADDRESS NonStandardLayoutClass<int > a;
6369 char c;
6470 char get_c () const { return c; }
6571 void set_c (char c) { this ->c = c; }
@@ -69,7 +75,7 @@ struct ReuseNonStandardLayoutFieldPadding {
6975
7076template <typename T>
7177struct ReuseDependentFieldPadding {
72- [[no_unique_address]] struct { private: T x; public: char pad_me; } a;
78+ NO_UNIQUE_ADDRESS struct { private: T x; public: char pad_me; } a;
7379 char c;
7480 char get_c () const { return c; }
7581 void set_c (char c) { this ->c = c; }
@@ -94,7 +100,7 @@ struct EmptyNotImported {
94100
95101struct LastFieldNoUniqueAddress {
96102 char c;
97- [[no_unique_address]] EmptyNotImported p0;
103+ NO_UNIQUE_ADDRESS EmptyNotImported p0;
98104
99105 LastFieldNoUniqueAddress (const LastFieldNoUniqueAddress &other) {}
100106 LastFieldNoUniqueAddress (LastFieldNoUniqueAddress &&other) {}
0 commit comments