Doxygen error: Found ';' while parsing initializer list

Doxygen error: Found ';' while parsing initializer list

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 {};

这与 foo.

没有参数的定义基本相同

非常感谢您提供解决方法。在最坏的情况下,我想以某种方式让 Doxygen 忽略这个定义。

答案就在docs中。使用 doxygen 的 \cond\endcond 命令或使用预处理器定义。

/// \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 添加到您的配置文件。

我刚刚在 GitHub 中提交了针对此问题的修复,请参阅 https://github.com/doxygen/doxygen/commit/985faf287233badf65fa33d21bde17afa6970d60