В C++11 FDIS говорится:
Если виртуальная функция помечена virt-спецификатором override и не переопределяет функцию-член базового класса, то программа не сформирована. базового класса, программа является некорректной. Пример:
struct B { virtual void f(int); }; struct D : B { void f(long) override; // ошибка: неправильная сигнатура, переопределяющая B::f void f(int) override; // OK };
Что если B::f
не был бы помечен как виртуальный? Тогда программа является некорректной? Или override
тогда следует игнорировать? Я не могу найти никакого рассмотрения этого случая в тексте std.
Обновление 1/2 (объединено) Я направил запрос редакторам C++, чтобы они посмотрели на ситуацию. Спасибо Johannes, что указал мне на это.
Но осознав это, я обнаружил, что намерение контекстного ключевого слова "override" не может быть выполнено: если опечатка в имени функции или неправильный тип аргумента делает саму функцию невиртуальной, то текст стандарта никогда не применяется - и "override" становится бесполезным.
Лучшим возможным решением может быть