Il seguente codice compila bene con clang. Volevo sapere se lo standard C++ va bene con questo.'static void' come decl-specificatore
class A {
static void x; // #1
static const void x; // #2
static volatile void x; // #3
};
A mio parere nessuna delle dichiarazioni è valida. Lo perenial C++ standard validation suite ha un tale test (# 1) e clang (v3.4) non riesce.
Sebbene, se rimuovo statico dal numero 1, allora clang segnala l'errore come previsto.
ho guardato lo standard e ho trovato un paragrafo sui membri di dati statici (9.4.2-2), che dice:
2 La dichiarazione di un membro di dati statici nella sua classe de fi nizione non è un definizione e può essere di un tipo incompleto diverso dal vuoto cv-qualificati. ...
Come ho capito, questa linea squalifica il n. 2 e il n. 3 come non validi, ma non sono sicuro del n. Ci sono altri dettagli relativi alla dichiarazione con la classe di archiviazione statica che dovrebbe escludere il numero 1?
Grazie,
questa è un'estensione clang. Sono abbastanza sicuro di aver letto il commit su di esso in passato. –
È possibile. In quale contesto questa estensione potrebbe eventualmente essere utile? –
Suppongo che se si istanzia un 'modello class' con una variabile membro' T x', potrebbe essere utile non interrompere se 'T = void' subito. –