Объявление прототипа функции после определения функции в классе с++

Есть такой код:

class Test
{
public:
    void foo()
    {}

    void foo();
};

И как вы понимаете он выбрасывает ошибку, только мне не понятно почему? Я посмотрел в стандарте про объявление членов класса, но ничего, что могло бы это запрещать не нашёл. Почему данный код не работает?


Ответы (1 шт):

Автор решения: VladD

Такое поведение требуется согласно §11.1.4/5 [class.mem.general]:

(5) A member shall not be declared twice in the member-specification, except that

(5.1) a nested class or member class template can be declared and then later defined, and
(5.2) an enumeration can be introduced with an opaque-enum-declaration and later redeclared with an enum-specifier.

Чем именно руководствовались авторы стандарта, я, к сожалению, не в курсе.

→ Ссылка