Ответ на ваш вопрос зависит от области, в которой определено это определение функции.
Если вы определите такую функцию в namespace scope, то конечный ;
не имеет ничего общего с определением функции. Он просто представляет собой отдельное пустое определение, которое следует за определением функции. Пустые определения являются допустимыми в области имен пространства в современном C ++. Это также означает, что в области имен вы можете добавить столько лишних точек с запятой, сколько пожелаете.
Если вы определите такую функцию в области видимости class , то вам всегда будет позволено добавить один необязательный ;
в конце определения. Такой ;
является неотъемлемой частью определения функции и явно разрешен грамматикой. То есть в контексте класса этот конечный ;
не является независимым пустым определением. Кроме того, пустые определения не допускаются в области видимости класса. Это означает, что в область видимости класса можно добавить только один необязательный ;
после определения функции, но не более.