C++コンパイラエラー:関数宣言からの無意味なエラー

2024-12-12

C++アプリケーションにXAMLサポートを追加しようとした開発者は、winrt/Windows.UI.Xaml.hヘッダーファイルを含めるだけで、一連のコンパイラエラーに遭遇しました。エラーの原因は、一見普通の関数宣言のように見える以下の部分でした。`template struct consume_Windows_UI_Xaml_IExceptionRoutedEventArgs { [[nodiscard]] auto ErrorMessage() const; };`根本原因は、開発者のプロジェクトに既に存在するErrorMessageという名前のマクロで、関数名と衝突していました。このマクロはErrorMessageStringオブジェクトを作成し、エラーメッセージ文字列へのポインタを返していました。マクロの境界がないため、コンパイラは関数宣言をマクロ呼び出しと誤って解釈し、「引数が足りない」などのエラーが発生しました。解決策としては、ヘッダーファイルを含める前に#pragma undefを使用してマクロを無効化するか、マクロを完全に削除してインライン関数に置き換えることです。