Doxygen 错误:解析初始值设定项列表时发现';'

Doxygen error: Found ';' while parsing initializer list

本文关键字:列表 发现 错误 Doxygen      更新时间:2023-10-16

Doxygen 1.8.11对以下定义感到窒息,我在不丢失警告消息的情况下尽可能简化了定义:

template <class T>
struct MySpecialization<T, void_t<decltype(std::declval<T>().foo(
                             std::declval<double>()))>> : std::true_type {};

警告是:

warning: Found ';' while parsing initializer list! (doxygen could be confused by a macro call without semicolon)

有趣的是,Doxygen在以下方面很好:

template <class T>
struct MySpecialization<T, void_t<decltype(std::declval<T>().foo())>> : std::true_type {};

这基本上是与CCD_ 1没有自变量的定义相同的定义。

我非常感谢一个变通办法。在最坏的情况下,我想以某种方式让Doxygen忽略这个定义。

我刚刚在GitHub中提交了一个关于此问题的修复程序,请参阅https://github.com/doxygen/doxygen/commit/985faf287233badf65fa33d21bde17afa6970d60

答案在文档中。使用doxygen的condendcond命令或使用预处理器定义。

/// cond NOPE
template <class T>
struct MySpecialization<T, void_t<decltype(std::declval<T>().foo(
                             std::declval<double>()))>> : std::true_type {};
/// endcond

使用预处理器定义,您可以添加Doxygen友好定义。例如,Qt项目就是这样做的。

#ifdef DOXYGEN_WORKING
template <class T>
struct MySpecialization<T, something_that_doxygen_understands> : std::true_type {};
#else
template <class T>
struct MySpecialization<T, void_t<decltype(std::declval<T>().foo(
                             std::declval<double>()))>> : std::true_type {};
#endif

并将PREDEFINED = DOXYGEN_WORKING添加到配置文件中。