переопределить не виртуальные функции

C ++ 11 FDIS это говорит

Если виртуальная функция помечена с помощью переопределения virt-спецификатора и не переопределяет функцию-член базового класса, программа является некорректной. [ Пример:

struct B {
    virtual void f(int);
};
struct D : B {
    void f(long) override; // error: wrong signature overriding B::f
    void f(int) override; // OK
};

Что, еслиB::f не был бы отмечен виртуальным? Программа плохо сформирована, тогда? Илиoverride тогда быть проигнорированным. Я не могу найти какую-либо обработку этого случая в тексте STD.

Обновление 1/2 (объединено) Я направил запрос в редакторы C ++, чтобы разобраться. СпасибоJohannes чтобы указать на это мне.

«void f (long) override» не переопределяет функцию, особенно нет виртуального,поэтому он не виртуальныйпоэтому текст "Если виртуальная функция помечена ..." не применяетсяпоэтому пример не соответствует тексту.

Но, поняв это, я обнаружил, что цель контекстного ключевого слова «переопределить» не может быть достигнута: если опечатка в имени функции или неправильный тип аргумента делает саму функцию не виртуальной, то текст стандарта никогда не применяется - - и «переопределить» становится бесполезным.

Лучшее возможное решение может быть

поставить «виртуальный» перед функциями примера

Ответы на вопрос(3)

Ваш ответ на вопрос