Я прочитал это о классе в стандартном документе С++:
Класс - это тип. Его имя становится именем класса (9.1) в пределах его области действия.
class-name: identifier template-id
Я нашел эту грамматику для идентификатора в стандарте С++:
2.10 Identifiers
identifier: nondigit
identifier nondigit
identifier digit
nondigit: one of universal-character-name
_ a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
digit: one of 0 1 2 3 4 5 6 7 8 9
Теперь я попытался сделать это:
class
{
public:
int i;
};
и он отлично компилируется без имени.
Может ли кто-нибудь дать мне объяснение по этому поводу? Разве это не нарушение грамматики, указанной для идентификатора?
Наваз задал дополнительный вопрос о соответствии кода, который я дал, стандарту. Желающие могут проверить это здесь.
error: abstract declarator ‘<anonymous class>’ used as declaration
- person Alberto Moriconi   schedule 31.10.2012