Una risposta alla domanda Disable check for override in gcc ha suggerito di utilizzare -Doverride=
sulla riga di comando per disattivare gli errori per l'uso errato di override, che è effettivamente la stessa come l'aggiunta di:È un comportamento non definito per # define/# undef un identificatore con un significato speciale?
#define override
al file di origine.
La mia reazione iniziale è stata che questo mi sembra un comportamento indefinito poiché stiamo ridefinendo una parola chiave, ma guardando la parte standard progetto C++ 11 2.12
Parole [lex.key] mi ha sorpreso nessuno che esclusione né finale sono parole chiave. Sono coperti nella sezione precedente 2.11
[lex.name] che dice che sono identificatori con significato speciale:
Gli identificatori nella tabella 3 hanno un significato speciale quando appare in un certo contesto [... ]
e Tabella 3 è etichettato identificatori con significato speciale e comprende sia sostituzione e finale.
La domanda è, è un comportamento indefinito di ridefinire (utilizzando # define) identificatori con significato speciale? Sono trattati in modo diverso rispetto alle parole chiave in questo senso?
Che cosa è "ridefinire" una macro di pre-processore o una dichiarazione? –
@ DieterLücking buona cattura, voglio dire con '# define', modificato per chiarire. –
@benvoigt questi sono completamente diversi domanda –