Erreurs du compilateur C++ : erreurs absurdes provenant d’une déclaration de fonction

2024-12-12

Un développeur ajoutant la prise en charge de XAML à une application C++ a rencontré une série d’erreurs du compilateur simplement en incluant le fichier d’en-tête winrt/Windows.UI.Xaml.h. Les erreurs provenaient de ce qui semblait être une déclaration de fonction normale : `template struct consume_Windows_UI_Xaml_IExceptionRoutedEventArgs { [[nodiscard]] auto ErrorMessage() const; };` La cause première était une macro préexistante nommée ErrorMessage dans le projet du développeur, entrant en conflit avec le nom de la fonction. Cette macro créait un objet ErrorMessageString et retournait un pointeur vers une chaîne de caractères de message d’erreur. L’absence de limites de la macro a fait que le compilateur interprétait erronément la déclaration de la fonction comme une invocation de macro, ce qui a entraîné des erreurs telles que « arguments insuffisants ». La solution consistait à désactiver la macro à l’aide de #pragma undef avant d’inclure l’en-tête ou à supprimer complètement la macro et à la remplacer par une fonction inline.