Почему стандарт C++ определяет Decl-Specifier-Seq Необязательный

Почему в стандартной грамматике C++ decl-specifier-seq под simple-declaration необязательно?

simple-declaration:
 decl-specifier-seq(optional)  init-declarator-list(optional);

Согласно спецификации, только функции конструктора, деструктора и преобразования типов могут не иметь decl-specifier-seq (раздел 9.2 или раздел 7 dcl.dcl). Но все эти 3 объявления функций являются членами класса, поэтому они должны быть определены другим правилом грамматики, отделенным от simple-declaration:

member-declaration:
 decl-specifier-seq(optional) member-declarator-list(optional);
 function-definition ;(optional)
 ::(optional) nested-name-specifier template(optional) unqualified-id ;
 using-declaration
 static_assert-declaration
 template-declaration

Здесь decl-specifier-seq не является обязательным, как и ожидалось. Но почему в simple-declarationТоже необязательно?

0 ответов

Другие вопросы по тегам