Ответ на вопрос Отключить проверку на переопределение в gcc, предложив использовать -Doverride=
в командной строке, чтобы отключить ошибки для ошибочного использования override, что фактически совпадает с добавлением:
#define override
в исходный файл.
Моя первоначальная реакция заключалась в том, что это похоже на поведение undefined, поскольку мы переопределяем ключевое слово, но смотрим на стандартный раздел С++ 11 2.12
Ключевые слова [lex.key] Я был удивлен, что ни переопределение, ни окончательный ключевые слова. Они описаны в предыдущем разделе 2.11
[lex.name], в котором говорится, что они являются идентификаторами со специальным значением:
Идентификаторы в таблице 3 имеют особое значение при появлении в определенный контекст [...]
а в таблице 3 обозначены идентификаторы со специальным значением и включают как переопределение, так и окончательное.
Вопрос в том, является ли поведение undefined переопределять (используя #define) идентификаторы со специальным значением? В этом отношении они рассматриваются иначе, чем ключевые слова?