Nella maggior parte dei contesti, è possibile utilizzare il tipo elaborato specificatorestruct foo
, o equivalentemente class foo
, anziché solo il nome della classe foo
. Questo può essere utile per risolvere le ambiguità:
struct foo {}; // Declares a type
foo foo; // Declares a variable with the same name
foo bar; // Error: "foo" refers to the variable
struct foo bar; // OK: "foo" explicitly refers to the class type
Tuttavia, non è possibile utilizzare questo modulo quando si dichiara un costruttore, in modo che il compilatore è sbagliato ad accettare che il codice. La specifica per una dichiarazione del costruttore (in C++ 11 12.1/1) consente solo il nome della classe stessa, non un identificatore di tipo elaborato.
In generale, non dovresti essere sorpreso quando Visual C++ compila tutti i tipi di codice instabile. È noto per le sue estensioni non standard alla lingua.
fonte
2013-07-19 12:55:48
Non mi compila con G ++ 4.8. Ma il compilatore MS vs2010 lo accetta. Puzza di strano bug parse. Che compilatore stai usando? – SteveLove
[tag: Visual-C++], compilatore MS. Scusate, devo scriverlo a lezione. –
Perché i downvotes? La domanda è corretta e in effetti compila in VC++ (almeno VC++ 2010) senza avvisi. Non sapere la risposta non è una ragione per il downvote. Che ciò vada contro lo standard non è né l'uno né l'altro. – Gorpik