On Thu, 4 May 2023 at 10:26, Timur Doumler via Std-Proposals <std-proposals@lists.isocpp.org> wrote:
Attributes are for ignorable things. I proposed to add an explicit Ignorability Rule to the standard – which we did for C++23:

Now, no_unique_address is a class layout hint. It is to composition what the Empty Base Optimisation is to inheritance. The EBO is likewise not a required optimisation, only an optional one (the only difference being that it doesn't have its own annotation). More generally, the standard doesn't require any particular class layout in any particular scenario. Your code should not portably rely on a particular class layout. Considering that, I'm not sure it makes sense to have a non-ignorable no_unique_address.

And if you really do require a particular layout when using [[no_unique_address]], knowing that doing so is not portable, then you can use a static_assert to ensure that you get that layout.

"The non-required forms of any existing standard attributes with effects on program behaviour, such as no_unique_address, should also be deprecated" -- that would be a serious breaking change for questionable benefit.

w.r.t your proposed wording, you've introduced a new grammar but haven't said what it means. A term should be in italics when it's defined, not when it's used. You're using the new term "required attribute"in italics, but you never define it anywhere. Presumably you wanted to say that when the ! is present in an attribute, it's a required attribute, but you haven't actually said that.