Я пытался разобрать только эти конструкции без каких-либо конструкций #include.
И синтаксический анализ typedef правильный.
Я обнаружил, что проблема в другом.
Препроцессор попытался найти #include "file.h" - не смог найти, поэтому сгенерировал "фатальную ошибку: такого файла нет", и препроцессор был прерван. Поэтому следующая предварительная обработка шаблонов и прочего была остановлена. И поэтому я получил недействительную декларацию.
Я нашел исправление:
-Необходимо, чтобы препроцессор не завершал работу через «фатальную ошибку: такого файла нет».
Я изменил код (я добавил конструкцию в пользовательский класс ParseDeclarationAction, который унаследован от ASTFrontendAction):
CI.getPreprocessor () SetSuppressIncludeNotFoundError (истина);.
В результате у меня есть класс:
класс ParseDeclarationAction: общедоступный ASTFrontendAction
{
общественности:
virtual unique_ptr CreateASTConsumer (CompilerInstance & CI, StringRef InFile) {
. CI.getPreprocessor () SetSuppressIncludeNotFoundError (истина);
return unique_ptr (новый ParseDeclarationConsumer (& CI.getASTContext ()));
}
};
Я думаю, что проблема может помочь другим пользователям Clang.
Эта задача решена.
С наилучшими пожеланиями,
Иван.