Proposed resolution (September, 2015): Change 9.13.1 [dcl.attr.grammar] paragraph 6 as follows: Two consecutive left square bracket tokens shall appear only when
introducing an attribute-specifier or within
the balanced-token-seq of
an attribute-argument-clause. [Note: If two consecutive
left square brackets appear where an attribute-specifier is not
allowed, the program is ill-formed even if the brackets match an
alternative grammar production. —end note]
[Example:
—end example]
int p[10];
void f() {
int x = 42, y[5];
int(p[[x] { return x; }()]); // error: invalid attribute on a nested
// declarator-id and not a function-style cast of
// an element of p.
y[[] { return 2; }()] = 2; // error even though attributes are not allowed
// in this context.
int i [[vendor::attr([[]])]]; // well-formed implementation-defined attribute.
}
[Adopted at the February, 2016 meeting.] According to 9.13.1 [dcl.attr.grammar] paragraph 6, In order to allow program fragments to appeae within
attributes, this restriction should not apply within the
balanced-token-seq of an attribute.
Two consecutive left square bracket tokens shall appear only
when introducing
an attribute-specifier. [Note: If two
consecutive left square brackets appear where
an attribute-specifier is not allowed, the program is
ill-formed even if the brackets match an alternative grammar
production. —end note]