Стандарт гласит:
«Член класса T не может использовать T в качестве своего имени, если он является статическим членом данных, функцией-членом, типом члена, шаблоном члена, перечислителем перечисления с незаданной областью, членом анонимного объединения-члена. Однако нестатический член данных может использовать имя T, если нет объявленных пользователем конструкторов. «
Однако, если я создаю этот класс, он дает ошибку компиляции.
class G
{
int G;
};
Я использую VS2013. Это не разрешено в Microsoft или?
Если VC ++ не позволяет этого, это ошибка.
Однако эта «функция» языка предназначена для совместимости с C, и Microsoft решила не делать упор на C. Например, функции C99, как правило, недоступны до тех пор, пока не будут приняты C ++. Вы никогда не должны намеренно объявлять такого члена в C ++.
(Это разрешено в C просто по умолчанию: нет ограничений на именование членов, и все члены являются нестатическими членами данных.)