Vérifier si le mot clé existe en C ++

Je compilais un programme C ++ qui utilise le mot clé C ++ “override”.

Je l’ai compilé avec succès dans Visual Studio 2010, mais je dois maintenant le comstackr sous g ++. Seul g ++ 4.6 est disponible (et vous avez besoin de g ++ 4.7 pour prendre en charge le “remplacement”).

La vraie solution est d’installer g ++ 4.7 (ce qui se passe actuellement), mais cela m’a fait réfléchir. Existe-t-il une vérification à la compilation pour savoir si un mot clé est pris en charge?

J’ai essayé:

#ifndef override #define override #ifdef BUILD_WINDOWS #pragma message("The \"override\" keyword is not supported on this comstackr! Ignoring it!") #else #warning "The \"override\" keyword is not supported on this comstackr! Ignoring it!" #endif #endif 

Cela ne fonctionne pas, car “remplacer” n’est pas un symbole.

Je voudrais quelque chose de plus général que de simplement vérifier la version du compilateur pour voir si c’est l’un de ceux qui supportent le mot clé. Comment cela peut-il être fait, voire pas du tout?

Je ne connais aucun moyen de rechercher des mots clés spécifiques dans le programme. Le mieux que je puisse faire est de rechercher des macros spéciales prédéfinies pour des versions spécifiques de compilateur / compilateur ou de langue / langue.

Pour les premiers, il y a

 #if defined __GNUC__ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) 

Pour ce dernier, il y a

 #if __cplusplus >= 201103L