2015-08-08 13 views
8

Lo standard dice, "Un membro di una classe T non può usare T come nome se il membro è un membro dati statici, una funzione membro, un tipo membro, un modello membro, un enumeratore di un'enumerazione senza ambito, un membro di un'unione anonima membro.Tuttavia, un membro di dati non statici può utilizzare il nome T purché non ci siano costruttori dichiarati dall'utente. "membro dati con il nome classe

Tuttavia, se creo questa classe, viene fornito un errore di compilazione.

class G 
{ 
    int G; 
}; 

Sto usando VS2013. Non è consentito in Microsoft o?

+3

Qual è l'errore di compilazione? Questo funziona con Clang e GCC. – Hamdor

+10

I compilatori microsoft sono (in) famosi per la loro mancata conformità a qualsiasi tipo di standard. –

+0

errore: C2380: tipo (s) precedente 'G' (costruttore con tipo di ritorno o ridefinizione illegale del nome corrente della classe?) Quindi, non lo consentono :( –

risposta

3

Se VC++ non lo consente, è un bug.

Tuttavia, questa "funzione" linguaggio è ai fini della compatibilità C e Microsoft ha deciso di non sottolineare C. Ad esempio, le funzioni C99 non sono disponibili come regola fino a quando non vengono adottate da C++. Non dovresti mai dichiarare di proposito un membro del genere in C++.

(E 'consentito in C semplicemente per difetto: non ci sono restrizioni sulla denominazione dei membri, e tutti i membri sono membri di dati non statici.)

Problemi correlati