Почему стандарт 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
Тоже необязательно?