Poniższy kod kompiluje dobrze z clang. Chciałem wiedzieć, czy standard C++ jest w porządku z tym.'static void' jako specyfikator decl
class A {
static void x; // #1
static const void x; // #2
static volatile void x; // #3
};
Moim zdaniem żadne z deklaracji nie są ważne. Ten jeden taki test (nr 1) i clang (v3.4) zawodzą w tym.
Chociaż, jeśli usuwam statyczne z # 1, to raportuje błąd zgodnie z oczekiwaniami.
Spojrzałem na standardzie i znalazłem jeden akapit na statycznych danych (9.4.2-2), który mówi:
2 Deklaracja statycznej członka danych w swojej klasie de fi nicji nie jest Definicja i może być niekompletnego typu, innego niż cv-kwali fi kowana pustka. ...
Jak rozumiem ta linia dyskwalifikuje # 2 i # 3 są nieważne, ale nie jestem pewien co # 1. Czy są jakieś szczegóły dotyczące deklaracji z klasą pamięci statycznej, które powinny wykluczyć # 1?
Dzięki,
to rozszerzenie klang. Jestem pewien, że przeczytałem o tym zobowiązaniu w przeszłości. –
Jest to możliwe. W jakim kontekście to rozszerzenie może jednak być przydatne? –
Zgaduję, że jeśli tworzysz 'szablon klasy' ze zmienną składową' T x', to może być użyteczne, aby nie przerwać, jeśli 'T = void' od razu. –