C++11: attribute-specifier am Ende?

06/01/2016 - 17:06 von Thomas Dorner | Report spam
Ich habe eine Frage zur Platzierung von attribute-specifier im Member
einer Klasse / Struktur (speziell in C++11), speziell "alignas(N)".
Klar ist für mich, daß er vorne immer erlaubt ist, z.B.:

struct S {
...
alignas(4) char b[6];
};

Die Frage ist, ob nach Standard auch folgende Schreibweise erlaubt wàre:

struct S {
...
char b[6] alignas(4);
};

Im Standard habe ich in den verschiedenen Syntax BNFs die
attribute-specifier-seq an sovielen Stellen gefunden, daß ich irgendwie
den Überblick verloren habe (außer bei Bit-Feldern, m.E. müßte nach
9.6 "char a:1 <attribute-specifier>" verboten sein).

Ich habe mal unten stehendes Beispiel durch den Online Compiler
http://melpon.org/wandbox/ gejagt, GCC 5.2.0 làßt es durch und Clang
3.7.0 meldet einen Syntaxfehler. Vorne lassen es beide durch.

#include <iostream>
struct S {
short a;
char b[6] alignas(4);
};
int main()
{
std::cout << alignof(S) << ',' << sizeof(S) << "";
}

Wer hat nach Standard recht, GCC oder Clang? (Ich tippe ja auf
letzteres, bin mir aber nicht sicher.)

Frohes neues Jahr übrigens, Thomas
 

Lesen sie die antworten

#1 ram
08/01/2016 - 19:31 | Warnen spam
Thomas Dorner writes:
Die Frage ist, ob nach Standard auch folgende Schreibweise erlaubt wàre:


...
char b[6] alignas(4);



Es gibt in 8p4 [dcl.decl] die Produktion

<noptr-declarator> ::<noptr-declarator> "[" [<constant-expression>] "]"
[<attribute-specifier-seq>].

. Die Bedeutung wird in 8.3.4p1 [dcl.array] erklàrt.

Ähnliche fragen