C++-Compilerfehler: Unsinnige Fehler aus einer Funktionsdeklaration
Ein Entwickler, der XAML-Unterstützung zu einer C++-Anwendung hinzufügen wollte, stieß auf eine Reihe von Compilerfehlern, allein durch das Einfügen der Headerdatei winrt/Windows.UI.Xaml.h. Die Fehler rührten von dem, was wie eine normale Funktionsdeklaration aussah, her: `template struct consume_Windows_UI_Xaml_IExceptionRoutedEventArgs { [[nodiscard]] auto ErrorMessage() const; };` Die Ursache war ein bereits vorhandenes Makro namens ErrorMessage im Projekt des Entwicklers, das mit dem Funktionsnamen kollidierte. Dieses Makro erzeugte ein ErrorMessageString-Objekt und gab einen Zeiger auf eine Fehlernachrichtenzeichenkette zurück. Die Begrenzungslosigkeit des Makros führte dazu, dass der Compiler die Funktionsdeklaration fälschlicherweise als Makroaufruf interpretierte, was zu Fehlern wie "nicht genügend Argumente" führte. Die Lösung bestand darin, das Makro mit #pragma undef zu deaktivieren, bevor der Header eingefügt wurde, oder das Makro ganz zu entfernen und es durch eine Inline-Funktion zu ersetzen.
Mehr lesen